在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作为配对中的第二个元素。