我正在使用TensorFlow 1.4 C ++ API加载V2检查点,这个答案非常简单:https://stackoverflow.com/a/43639305/9015277。但是,此答案未指定如何将输入馈送到加载的网络。
在TF 1.4中,ClientSession::Run()
的输入可以使用FeedType对象指定,该对象定义为:
std::unordered_map< Output, Input::Initializer, OutputHash > FeedType
这里每个Output
键表示由OP产生的张量值。使用C ++ API中构建的图形,我想只是传递输入占位符是相当简单的,但是如何使用从V2检查点加载的图形来做同样的事情呢?
在这个例子中(使用我认为的r0.12 api)https://github.com/tensorflow/tensorflow/blob/ab0fcaceda001825654424bf18e8a8e0f8d39df2/tensorflow/examples/label_image/main.cc#L346它再次简单明了,这些图层只是给出了它们的名字。但是我如何对新API做同样的事情呢?
答案 0 :(得分:2)
好吧,我没有得到任何有用的答案,所以最后我最终只使用旧的C ++ API(BTW仍在r1.4中工作)。我仍然在寻找一个如何使用新API完成此操作的答案。
在旧的TF API Session :: Run中如下:
virtual Status 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
inputs
向量中的字符串允许使用python图形定义中的名称来指定网络中的输入,类似于在python上使用feed_dict
的方式。这是我在python中输入占位符的图形定义:
with tf.variable_scope('global'):
velocity_state = tf.placeholder(shape=[None, 1],
dtype=tf.float32,
name='velocity_state')
在C ++中使用一些虚拟数据和运行推理来提供此特定占位符:
using namespace tensorflow;
// specifying input node name and creating tensor to feed it
string velocity_state_placeholder = "global/velocity_state";
Tensor velocity_state = Input::Initializer((float)0.0, TensorShape({1, 1})).tensor;
// collecting all inputs
std::vector<std::pair<string, Tensor>> input_feed;
input_feed.push_back(std::make_pair(velocity_state_placeholder, velocity_state));
// output node name
string action_distribution = "global/fully_connected_1/Softmax";
// tensor for results
std::vector<Tensor> output_tensors;
// running inference
Status run_status = session->Run(input_feed,
{action_distribution},
{},
&output_tensors);
答案 1 :(得分:0)
根据TensorFlow API1.4 documentation,tensorflow::ClientSession::Run
具有以下签名:
Status Run (
const FeedType & inputs,
const std::vector< Output > & fetch_outputs,
const std::vector< Operation > & run_outputs,
std::vector< Tensor > *outputs
) const;
的typedef
std::unordered_map< Output, Input::Initializer, OutputHash > FeedType