tensorflow: transpose expects a vector of size 1. But input(1) is a vector of size 2

大城市里の小女人 提交于 2019-12-23 04:11:35

问题


I want to use a trained RNN language model to do inference.So:
I loaded the trained model graph in c++ using

tensorflow::MetaGraphDef graph_def;
TF_CHECK_OK(ReadBinaryProto(Env::Default(), path_to_graph, &graph_def));
TF_CHECK_OK(session->Create(graph_def.graph_def()));

load the model parameters by:

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));

up till now, everything goes fine.
Then I want to compute the value of the node "output/output_batch_major":

TF_CHECK_OK(session->Run(inputs,{"output/output_batch_major"},{"post_control_dependencies"}, &outputs));

I got the error:

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)

I checked the graph using tensorboard, extern_data/placeholders/delayed/sequence_mask_time_major/transpose/perm is a Tensor with size 2, is this Tensor the input(1) in the error? How can I fix the problem?
Any idea? Thanks in advance!


回答1:


I had a similar issue on the input tensor to my predictor. I expanded the dimension by one and the issue was resolved. I suggest running the predictor in python, first. This helps to identify the size of the input tensor that you are passing to the predictor. Then, replicate the exact same size in C++. Also, based on your code snippet, I am not sure how you define the inputs to the Run method. I defined is as follows in my code:

std::vector<std::pair<std::string, tensorflow::Tensor>> input = { {"input_1", input_tensor } };

where "input_1" is the name of my input layer. I hope this helps.




回答2:


I get this error when pass wrong input type into tensorflow model. The model require 3d dimension array, I pass 1d dimension instead of so check your input data first.



来源:https://stackoverflow.com/questions/51326140/tensorflow-transpose-expects-a-vector-of-size-1-but-input1-is-a-vector-of-si

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!