在C ++中为Tensorflow模型定义feed_dict
问题内容:
这个问题与此有关: 从Python导出Tensorflow图以在C
++中使用
我正在尝试将Tensorflow模型从Python导出到C 。问题是,我的神经网络从占位符开始以接收输入,这需要feed_dict。我找不到任何c
API为模型提供feed_dict。我能做什么?
如果没有提供feed_dicts的API,我应该如何更改我的模型,以便可以在不使用占位符的情况下对c ++进行训练和导出?
问题答案:
该tensorflow::Session::Run()
方法与Pythontf.Session.run()
方法等效于C
,并且支持使用inputs
参数提供张量。就像C 和Python中的许多东西一样,它使用起来有些棘手(在这种情况下,文档看起来有点差……)。
该inputs
参数具有type const std::vector<std::pair<string, Tensor>>&
。让我们分解一下:
-
的每个元素
inputs
对应于您要在Run()
调用中提供的单个张量(例如占位符)。元素具有类型std::pair<string, Tensor>
。 -
的第一个元素
std::pair<string, Tensor>
是要馈送的图中张量的 名称 。例如,假设在Python中您有:p = tf.placeholder(..., name="placeholder")
…
sess.run(…, feed_dict={p: …})
…然后在C ++中,该对的第一个元素将是的值p.name
,在这种情况下为"placeholder:0"
-
的第二个元素
std::pair<string, Tensor>
是要作为tensorflow::Tensor
对象输入的值。您必须使用C ++自己构建它,定义一个Numpy数组或Python对象要复杂一些,但是这里有一个如何指定2 x 2矩阵的示例:using tensorflow::Tensor;
using tensorflow::TensorShape;
Tensor t(DT_FLOAT, TensorShape({2, 2}));
auto t_matrix = t.matrix();
t_matrix(0, 0) = 1.0;
t_matrix(0, 1) = 0.0;
t_matrix(1, 0) = 0.0;
t_matrix(1, 1) = 1.0;
…然后您可以将其t
作为配对中的第二个元素。