Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Tensorflow C API分段故障_C++_C_Tensorflow_Keras_Protobuf C - Fatal编程技术网

C++ Tensorflow C API分段故障

C++ Tensorflow C API分段故障,c++,c,tensorflow,keras,protobuf-c,C++,C,Tensorflow,Keras,Protobuf C,我使用Keras来训练一个简单的RNN,它有两层LSTM和辍学。我想在tensorflow C API中加载.pb图,并将其用于以后的预测,但我遇到了分段错误。后来我发现,如果我保持网络不变,只删除退出选项并重新训练,那么一切都正常运行。然而,我想使用一个辍学,因为准确度更好地预测测试数据。有人提出建议吗?使用tensorflow C API的示例太少了 这里是我得到分段错误的地方: TF_SessionRun(session, NULL, &inpu

我使用Keras来训练一个简单的RNN,它有两层LSTM和辍学。我想在tensorflow C API中加载.pb图,并将其用于以后的预测,但我遇到了分段错误。后来我发现,如果我保持网络不变,只删除退出选项并重新训练,那么一切都正常运行。然而,我想使用一个辍学,因为准确度更好地预测测试数据。有人提出建议吗?使用tensorflow C API的示例太少了

这里是我得到分段错误的地方:

TF_SessionRun(session, NULL,
                  &inputs[0], &input_values[0], static_cast<int>(inputs.size()),
                  &outputs[0], &output_values[0], static_cast<int>(outputs.size()),
                  NULL, 0, NULL, status);
    // Assign the values from the output tensor to a variable and iterate over them
    ASSERT(!output_values.empty());
float* out_vals = static_cast<float*>(TF_TensorData(output_values[0]));

然后

gdb显示TF_张量数据(输出_值[0]);是分段的来源。当调用
TF_SessionRun
失败时,可能会发生这种情况(根据)。您应该使用类似以下内容检查
status
的值:``ASSERT\u EQ(TF\u OK,TF\u GetStatus(status))@ash谢谢,我最近解决了这个问题。基本上,我在Keras中使用辍学训练rnn,但在将tensorflow中的.mdl文件转换为.pb文件的过程中,我忘记将K.learning阶段设置为0。在函数中添加一行:set_learning_phase(0)int函数convert_to_pb完美地解决了这个问题。
# Create function to convert saved keras model to tensorflow graph
def convert_to_pb(weight_file,input_fld='',output_fld=''):

    import os
    import os.path as osp
    from tensorflow.python.framework import graph_util
    from tensorflow.python.framework import graph_io
    from keras.models import load_model
    from keras import backend as K


    # weight_file is a .h5 keras model file
    output_node_names_of_input_network = ["pred0"]
    output_node_names_of_final_network = 'output_node'

    # change filename to a .pb tensorflow file
    output_graph_name = weight_file[:-3]+'pb'
    weight_file_path = osp.join(input_fld, weight_file)

    net_model = load_model(weight_file_path)

    num_output = len(output_node_names_of_input_network)
    pred = [None]*num_output
    pred_node_names = [None]*num_output

    for i in range(num_output):
        pred_node_names[i] = output_node_names_of_final_network+str(i)
        pred[i] = tf.identity(net_model.output[i], name=pred_node_names[i])
    print('output nodes names are: ', pred_node_names)
    sess = K.get_session()

    constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph.as_graph_def(), pred_node_names)
    graph_io.write_graph(constant_graph, output_fld, output_graph_name, as_text=False)
    print('saved the constant graph (ready for inference) at: ', osp.join(output_fld, output_graph_name))

    return output_fld+output_graph_name

tfpath = convert_to_pb(sys.argv[1],'./','./')
print 'tfpath: ', tfpath