我想使用训练有素的RNN语言模型进行推理。
我使用
tensorflow::MetaGraphDef graph_def;
TF_CHECK_OK(ReadBinaryProto(Env::Default(), path_to_graph, &graph_def));
TF_CHECK_OK(session->Create(graph_def.graph_def()));
通过以下方式加载模型参数:
Tensor checkpointPathTensor(tensorflow::DT_STRING, tensorflow::TensorShape());
checkpointPathTensor.scalar<std::string>()() = path_to_ckpt;
TF_CHECK_OK(session_->Run({{graph_def.saver_def().filename_tensor_name(), checkpointPathTensor} },{},{graph_def.saver_def().restore_op_name()},nullptr));
到目前为止,一切都很好。
然后,我要计算节点“ output / output_batch_major”的值:
TF_CHECK_OK(session->Run(inputs,{"output/output_batch_major"},{"post_control_dependencies"}, &outputs));
我得到了错误:
2018-07-13 14:13:36.793495: F tf_lm_model_loader.cc:190] Non-OK-status: session->Run(inputs,{"output/output_batch_major"},{"post_control_dependencies"}, &outputs) status: Invalid argument: transpose expects a vector of size 1. But input(1) is a vector of size 2
[[Node: extern_data/placeholders/delayed/sequence_mask_time_major/transpose = Transpose[T=DT_BOOL, Tperm=DT_INT32, _device="/job:localhost/replica:0/task:0/device:CPU:0"](extern_data/placeholders/delayed/SequenceMask/Less, extern_data/placeholders/delayed/sequence_mask_time_major/transpose/perm)]]
Aborted (core dumped)
我使用张量板检查了图形,extern_data/placeholders/delayed/sequence_mask_time_major/transpose/perm
是大小为2的Tensor
,这是张量input(1)
的错误吗?我该怎么解决?
知道吗?预先感谢!
答案 0 :(得分:0)
我的输入张量与我的预测变量有类似的问题。我将维度扩大了一个,问题就解决了。我建议首先在python中运行预测变量。这有助于确定传递给预测变量的输入张量的大小。然后,在C ++中复制完全相同的大小。另外,根据您的代码片段,我不确定如何定义Run方法的输入。我在代码中定义如下:
std::vector<std::pair<std::string, tensorflow::Tensor>> input = {
{"input_1", input_tensor }
};
其中“ input_1”是我的输入层的名称。 我希望这有帮助。
答案 1 :(得分:0)
当将错误的输入类型传递给tensorflow模型时出现此错误。该模型需要3d维度数组,因此我传递1d维度,因此请先检查您的输入数据。