使用已保存的Tensorflow Estimator和C++ API

jaw*_*jaw 8 c++ python tensorflow

我已经按照https://www.tensorflow.org/versions/r0.11/tutorials/estimators/中的描述用Python编写了Abalone估算器.我希望保存估计器的状态,然后在C++中加载它并使用它来进行预测.

为了从Python中保存它,我使用构造函数中的model_dir参数tf.contrib.learn.Estimator,它创建一个(文本)protobuf文件和几个检查点文件.然后我使用该freeze_graph.py工具(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py)将检查点和protobuf文件合并到一个独立的GraphDef文件中.

我使用C++ API加载此文件,将一些输入值加载到Tensor中,然后运行会话.protobuf文件中的输入节点称为"输入",输出节点称为"输出",两者都是占位符节点.

// ...
std::vector<std::pair<string, tensorflow::Tensor>> inputs = 
{
    {"input", inputTensor}
};

std::vector<tensorflow::Tensor> outputs;

status = pSession->Run(inputs, {"output"}, {}, &outputs);
Run Code Online (Sandbox Code Playgroud)

但是,由于输出节点是占位符节点,因此需要为其提供值,因此会失败.但是你不能同时提供和获取节点值,因此我无法访问估算器的输出.为什么输出节点是占位符节点?

从Python中保存经过训练的估算器并加载它以便在C++中进行预测的最佳方法是什么?