我正在尝试从内存而非文件中加载图形,以实现可移植性。到目前为止,我尝试的是
tensorflow::GraphDef graph_def;
tensorflow::protobuf::io::CodedInputStream coded_stream( buffer, size );
// Total bytes hard limit / warning limit are set to 1GB and 512MB respectively.
// coded_stream.SetTotalBytesLimit( 1024LL << 20 );
if( !proto->ParseFromCodedStream( &coded_stream ) || !coded_stream.ConsumedEntireMessage() )
{
return tensorflow::errors::DataLoss( "Can't parse ", "memory", " as binary proto" );
}
缓冲区是图形文件“ graph.pb”的字节数组(无符号char *)。此行的代码段错误:
proto-> ParseFromCodedStream(&coded_stream)
我也试图graph_def.ParseFromArray(data, len)
想在这个岗位或graph_def.ParseFromString( stringData )
但它也崩溃。我想念什么吗?谢谢。
ps:我在Ubuntu16.04上使用Tensorflow 1.9和protobuf 2.6.1
编辑好到目前为止,我已经尝试了所有可能的分析功能,他们都崩溃,所以我必须错过了一些非常基本的。我尝试过的解析函数是:
首先,我将.pb文件读入字节数组,如下所示:
std::ifstream is( "graph.pb", std::ios::binary );
std::vector<unsigned char> buffer(std::istreambuf_iterator<char>(is), {});
接下来,我将其转换为字符串:
string data(buffer.begin(), buffer.end());
最后,我打电话
graph_def.ParseFromString( data )
崩溃了,与相同ParseFromArray()
。令人讨厌的部分是它崩溃而不是返回错误,这使我认为我一定错过了一些基本知识。
崩溃的原因是由于系统上安装的protobuf运行时库版本与链接代码的版本之间不匹配。特别是,这是错误:
This program requires version 3.5.0 of the Protocol Buffer runtime library, but the installed version is 2.6.1.
我将protobuf升级到了3.5.0版,并且工作正常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句