我在加载从C ++中的tensorflow模型保存的协议缓冲区文件时遇到问题。我可以完全没有问题地在Python中加载和执行.pb文件,但是当尝试使用ReadBinaryProto
函数在C ++中加载该文件时,出现错误:
String field'tensorflow.MetaGraphDef.MetaInfoDef.tensorflow_version'
contains invalid UTF-8 data when parsing a protocol buffer. Use the 'bytes'
type if you intend to send raw bytes.
Non-OK-status: LoadModel(session_inception, pathToGraph ) status: Data loss:
Can't parse E:/Projects/SampleTensorflow/tmp/latestmodel.pb as binary proto
我正在使用 Tensorflow v1.10 ,下面发布了一个C ++代码示例,我尝试了许多其他方法来保存.pb文件,包括使用Frozen_graph方法和{{1 }}方法,似乎都无法解决问题。
tf.write_graph
谢谢您的帮助!
答案 0 :(得分:2)
一个可能的错误是.pb
文件包含一个GraphDef
而不是一个MetaGraphDef
。
要阅读GraphDef
,只需切换到
tensorflow::GraphDef graph_def;
status = ReadBinaryProto(tensorflow::Env::Default(), graph_fn,
&graph_def);
protobuf格式确实只是一个容器,没有说明它包含的内容。在tensorflow中,这种格式通常用于包含图和元图,这可能会造成混淆。