在 C++ 中为 Tensorflow 模型定义一个 feed_dict
Define a feed_dict in c++ for Tensorflow models
这个问题与这个问题相关:
Export Tensorflow graphs from Python for use in C++
我正在尝试将 Tensorflow 模型从 Python 导出到 C++。问题是,我的神经网络以占位符开始接收输入,这需要 feed_dict。我找不到任何 c++ API 来为我的模型提供 feed_dict。我能做什么?
如果没有 API 来提供 feed_dicts,我应该如何更改我的模型,以便它可以在没有占位符的情况下为 c++ 目的进行训练和导出?
tensorflow::Session::Run()
method is the C++ equivalent of the Python tf.Session.run()
方法,它支持使用 inputs
参数馈送张量。就像 C++ 中的许多东西与 Python 相比,它使用起来有点棘手(在这种情况下,文档看起来有点差......)。
inputs
参数的类型为 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<float>();
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
作为该对的第二个元素传递。
这个问题与这个问题相关: Export Tensorflow graphs from Python for use in C++
我正在尝试将 Tensorflow 模型从 Python 导出到 C++。问题是,我的神经网络以占位符开始接收输入,这需要 feed_dict。我找不到任何 c++ API 来为我的模型提供 feed_dict。我能做什么?
如果没有 API 来提供 feed_dicts,我应该如何更改我的模型,以便它可以在没有占位符的情况下为 c++ 目的进行训练和导出?
tensorflow::Session::Run()
method is the C++ equivalent of the Python tf.Session.run()
方法,它支持使用 inputs
参数馈送张量。就像 C++ 中的许多东西与 Python 相比,它使用起来有点棘手(在这种情况下,文档看起来有点差......)。
inputs
参数的类型为 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<float>(); 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
作为该对的第二个元素传递。