tensorflow:transpose需要一个大小为1的向量.但是输入(1)是大小为2的向量
tensorflow: transpose expects a vector of size 1. But input(1) is a vector of size 2
我想使用经过训练的RNN语言模型来进行推理。因此:
我使用在c++中加载了经过训练的模型图
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)
我用tensorboard检查了图,extern_data/placeholders/delayed/sequence_mask_time_major/transpose/perm
是尺寸为2的Tensor
,这个张量是错误中的input(1)
吗?我该如何解决这个问题
知道吗?提前感谢!
我在预测器的输入张量上遇到了类似的问题。我扩大了一个维度,问题就解决了。我建议首先在python中运行预测器。这有助于识别传递给预测器的输入张量的大小。然后,在C++中复制完全相同的大小。此外,根据您的代码片段,我不确定您是如何定义Run方法的输入的。我在代码中定义如下:
std::vector<std::pair<std::string, tensorflow::Tensor>> input = {
{"input_1", input_tensor }
};
其中"input_1"是我的输入层的名称。我希望这能有所帮助。
当将错误的输入类型传递到tensorflow模型时,会出现此错误。该模型需要三维维度数组,我通过了一维维度,而不是先检查你的输入数据。
相关文章:
- 将结构向量排序为子组
- C++将向量的向量拆分为向量的N个子向量
- 将特征矩阵的向量设置为0
- 将CHW格式的浮点向量转换为cv::Mat
- 如何将向量reinterpter_cast为 int?
- 将向量设置为等于 {};
- C++向量默认为成员参数
- 将编译时常量向量转换为堆分配版本
- 在 Cython 中将C++向量转换为 numpy 数组,而无需复制
- 在<uint8_t> <char> c++ 中将常量向量转换为常量向量
- C++ 将地址保存为字符串的向量转换为新的向量
- 如何使用 STL 算法将整数向量转换为字符串向量?
- 将 std::大小为 m 的向量拆分为大小为 n 的向量
- 在 c++ 中将集合转换为向量和向量转换为字符串时出现运行时异常
- 如何使用istream_iterator将无符号字符向量转换为字符串?
- 如何在 c++ 中将向量转换为<string>常量字符* const*?
- 将字符向量转换为单个字符串
- <int> 使用 fmt 库将向量转换为字符串
- 为什么当向量 v 为空时是 (0 < v.size()-1?
- 使用 std::transform 最终向量保持为空