使用 Tensorflow C++ 执行在 skflow 中训练的模型 API

Executing a model trained in skflow using the Tensorflow C++ API

是否可以使用没有标记输入(或输出)节点的 Tensorflow C++ API 执行图形?据我所知,在训练我的模型时(在 python 中使用 skflow,然后我将其保存为二进制 protobuf),我没有标记 input/output 个节点,但我能够恢复在 Python 中毫无困难地进行建模和预测。当使用 C++ API 执行图形时,输入向量是字符串和张量对,我假设字符串指的是输入节点的标签。来自文档:

Session::Run(const std::vector< std::pair< string, Tensor > > &inputs,
const std::vector< string > &output_tensor_names,
const std::vector< string > &target_node_names,
std::vector< Tensor > *outputs)=0

Runs the graph with the provided input tensors and fills outputs for the endpoints specified in output_tensor_names. Runs to but does not return Tensors for the nodes in target_node_names.

有什么方法可以在不知道 input/output 节点标签的情况下执行图形?也许有一种方法可以在 Python 中加载图表,给节点标签,然后再次将其保存为 protobuf?理想情况下,我只想传入一个应用于输入节点的向量,而不必担心任何标签。

如果可以 "restore the model and do predictions without difficulty in Python",那么您可以使用 "name" 属性 找到输入节点或张量的 names/labels,搜索“.name”在任一:

https://www.tensorflow.org/versions/0.6.0/api_docs/python/framework.html#Operation 要么: https://www.tensorflow.org/versions/0.6.0/api_docs/python/framework.html#Tensor

无论您是否明确命名,所有节点都有 names/labels。

在 skflow 中,所有节点都已经有标签,它只负责为您恢复它们。

Xy 的默认名称分别为 input:0output:0,然后是根据您使用的模型进行预测和损失的一些自定义名称。

找出预测和概率节点名称的方法是查看您保存模型的目录中的 endpoints 文件(如果您使用 estimator.save(path) 进行保存)。

它应该是这样的:

input:0

output:0

logistic_regression/softmax_classifier/Softmax

logistic_regression/softmax_classifier/xent:0

其中前两个是 input/output 节点的名称,后两个是预测和损失节点。