使用Tensorflow C ++ API执行skflow培训的模型

时间:2016-01-31 22:04:39

标签: python c++ machine-learning tensorflow skflow

是否可以使用没有标记输入(或输出)节点的Tensorflow C ++ API执行图形?据我所知,在训练我的模型时(在python中使用skflow,我后来将其保存为二进制protobuf),我没有标记输入/输出节点,但我能够恢复模型并毫无困难地进行预测在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
     

使用提供的输入张量运行图形并填充输出   output_tensor_names中指定的端点。跑到但不是   返回target_node_names中节点的张量。

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

2 个答案:

答案 0 :(得分:6)

在skflow中,所有节点都有标签,只需要为您恢复它们。

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

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

它应该是这样的:

  

输入:0

     

输出:0

     

logistic_regression / softmax_classifier /使用SoftMax

     

logistic_regression / softmax_classifier / xent:0

前两个是输入/输出节点的名称,后两个是预测和丢失节点。

答案 1 :(得分:1)

如果您可以“恢复模型并在Python中毫无困难地进行预测”,那么您可以使用“name”属性找到输入节点或张量的名称/标签,在以下任一位置搜索“.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

所有节点都有名称/标签,无论您是否明确命名它们。