Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow c_api(1.13.2)-导入LSTM.pb:预期输入[1]为控制输入_Python_C++_Tensorflow_Lstm_C Api - Fatal编程技术网

Python Tensorflow c_api(1.13.2)-导入LSTM.pb:预期输入[1]为控制输入

Python Tensorflow c_api(1.13.2)-导入LSTM.pb:预期输入[1]为控制输入,python,c++,tensorflow,lstm,c-api,Python,C++,Tensorflow,Lstm,C Api,我目前正在使用C-API(TF==1.13.2)导入一个经过训练的(python3.8,TF==2.3)LSTM模型。我必须坚持使用这个软件版本。我试着用一个虚拟的例子来展示我的步骤 使用tensorflow cli的我的模型说明(用于虚拟导入目的) python3.8~/path/to/tensorflow/python/tools/saved_model_cli.py show--dir~/path/to/model/folder--tag_set serve--signature_def

我目前正在使用C-API(TF==1.13.2)导入一个经过训练的(python3.8,TF==2.3)LSTM模型。我必须坚持使用这个软件版本。我试着用一个虚拟的例子来展示我的步骤

使用tensorflow cli的我的模型说明(用于虚拟导入目的)

python3.8~/path/to/tensorflow/python/tools/saved_model_cli.py show--dir~/path/to/model/folder--tag_set serve--signature_def serving_默认值为:

    The given SavedModel SignatureDef contains the following input(s):
      inputs['input_1'] tensor_info:
          dtype: DT_FLOAT
          shape: (-1, 2, 1)
          name: serving_default_input_1:0
    The given SavedModel SignatureDef contains the following output(s):
      outputs['dense'] tensor_info:
          dtype: DT_FLOAT
          shape: (-1, 1)
          name: StatefulPartitionedCall:0
    Method name is: tensorflow/serving/predict
我尝试使用以下方法导入图形结构:

uint8\t m\u numinput=1;
TF_输出*m_输入=静态_转换(malloc(sizeof(TF_输出)*m_numinput));
TF_输出t0={TF_GraphhoperationByName(m_Graph_,“服务_默认值_输入_1”),0};
m_输入_u0]=t0;
//*********求输出张量
uint8_t m_NumOutputs=1;
TF_输出*m_输出=静态_投射(malloc(sizeof(TF_输出)*m_NumOutputs));
TF_输出t2={TF_graphhoperationbyname(m_Graph_,“StatefulPartitionedCall”),0};
声明输入值后,我运行了一个会话:

TF_张量**InputValues=static_cast(malloc(sizeof(TF_张量*)*m_numinput));
TF_张量**OutputValues=static_cast(malloc(sizeof(TF_张量*)*m_NumOutputs));
const std::vector dims={1,2,1};
const auto data_size=std::accumulate(dims.begin()、dims.end()、sizeof(float)、std::乘{});
自动数据=静态转换(标准::malloc(数据大小));
向量VAL={1.0,1.0};
std::copy(vals.begin(),vals.end(),data);//初始输入值。
自动张量=TF_新传感器(
TF_浮动,
dims.data(),静态投影(dims.size()),
数据,数据大小,
&NoOpDeallocator,nullptr
);
输入值[0]=张量;
TF_会话运行(
m_会话,空,
输入值,输入值,输入值,
m_输出,输出值,m_数值,
NULL,0,NULL,
m_状态_
);
void*buff=TF_TensorData(输出值[0]);
浮动*偏移=静态施法(buff);
TF_SessionRun()
处,我收到以下错误:

Expected input[1] == 'TensorArrayV2_1/element_shape:output:0' to be a control input.
    In {{node TensorArrayV2Stack/TensorListStack}}
     [[{{node sequential/lstm/PartitionedCall}}]]
     [[{{node StatefulPartitionedCall}}]]
     [[{{node StatefulPartitionedCall}}]]
我只是不知道在这种情况下,控制输入意味着什么。在软件块2中,我将
输入[1]
设置为零,因为在cli输出中,当显示“名称”时,建议这样做


我尝试了几个不同的层,只有在我使用时间序列层(LSTM、GRU)时才收到这个错误。有人知道我可能错过了什么吗?谢谢你的建议

我对python 3.6.8、Tensorflow python 2.3.0版和Tensorflow Java 1.13.1版也有同样的问题。在将Java版本更新到1.15.0之后,它被修复了,并且我能够使用Java中的LSTM层进行预测。

如果其他人在这个问题上遇到了问题,我会做以下工作来确认问题与使用的Tensorflow版本有关:

我包含了TF2.3.1共享库,在Python中导出了TF2.3.1模型,并在C++中成功导入了模型。

之后,我将Python模型升级为版本1.131,并使用TF1.131共享库导入了C++中成功的模型。我使用了TysFooSo.2.3.1共享库,并能够成功地将模型导入C++中。