TensorFlow C ++ API在会话-> run()上崩溃

时间:2018-08-24 05:50:38

标签: c++ tensorflow

我正在编写一个Tensorflow c ++代码,以检查我在服务器上收到的图像序列是否属于“真”类别或“假”类别。我已经使用python训练了模型,并为模型生成了.pb文件。

现在,我将模型加载到c ++中,并使用以下代码从我从连接中接收到的向量传递图像:

for (int iLSP = 0; iLSP < LSPs.size(); iLSP++)
{
    Mat image1 []= {LSPs[iLSP], LSPs[iLSP], LSPs[iLSP]};
    Mat image;
    merge(image1,3,image);
    image.convertTo(image, CV_32FC1);
    image = image / 255.0;
    resize(image, image, Size(Width, Height));

    Tensor image_tensor(DT_FLOAT, TensorShape({1,Width,Height,3}));
    StringPiece tmp_data = image_tensor.tensor_data();
    memcpy(const_cast<char*>(tmp_data.data()), (image.data), Height * Width * sizeof(float));

    Session *sess;
    SessionOptions options;
    TF_CHECK_OK(NewSession(options, &sess));
    GraphDef graph_def;
    TF_CHECK_OK(ReadBinaryProto(Env::Default(), "models/model.pb", &graph_def));
    TF_CHECK_OK(sess->Create(graph_def));

    std::vector<std::pair<string, tensorflow::Tensor>> inputs = {{"x", image_tensor }};
    std::vector<tensorflow::Tensor> outputs;                

    Status status = sess->Run(inputs, {"y_pred"}, {}, &outputs);
    if (!status.ok())
    {
        cout<<"Error: "<<status.ToString()<<endl;
    }
    auto output_mapped = outputs[0].tensor<float, 2>();
    totalFalse += output_mapped(0);
    totalTrue  += output_mapped(1);
    sess->Close();
    image.release();
}

代码编译并运行。问题是在与服务器建立大量连接并接收到多个图像序列之后,代码崩溃了,没有任何错误输出,也没有指出崩溃的原因(甚至不是分段错误)。

在每行上都设置了一个“ cout”,以检查代码在哪里崩溃,并且显然发生在以下行:

Status status = sess->Run(inputs, {"y_pred"}, {}, &outputs);

为什么要调试sess-> run内部发生的事情?因为代码甚至都没有填充状态变量来产生想法!还有没有办法从会话运行中引发异常?正如我已经提到的,这将是服务器代码,至少如果session-> run不起作用,我可以在保持程序运行的同时捕获异常,并且不会使整个服务器崩溃

1 个答案:

答案 0 :(得分:0)

exit()_exit()terminate()函数上设置断点并运行代码。