gpt4 book ai didi

c++ - 无法使用 ReadBinaryProto Tensorflow 加载 Protocol Buffer

转载 作者:行者123 更新时间:2023-11-30 03:21:44 26 4
gpt4 key购买 nike

我在加载从 C++ 中的 tensorflow 模型保存的 Protocol Buffer 文件时遇到问题。我可以在 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 文件,包括使用 freeze_graph 方法和 tf.write_graph 方法,似乎都无法解决问题。

  tensorflow::Status LoadModel(tensorflow::Session *sess, std::string 
graph_fn, std::string checkpoint_fn = "") {
tensorflow::Status status;

std::string graph_fn = "E:/Projects/SampleTensorflow/tmp/latestmodel.pb";

// Read in the protobuf graph
tensorflow::MetaGraphDef graph_def;
status = ReadBinaryProto(tensorflow::Env::Default(), graph_fn,
&graph_def);

if (status != tensorflow::Status::OK())
return status;

// Create the graph
status = sess->Create(graph_def.graph_def());
if (status != tensorflow::Status::OK())
return status;

感谢您的帮助!

最佳答案

可能的错误是 .pb 文件包含 GraphDef 而不是 MetaGraphDef

要读取GraphDef,只需切换到

tensorflow::GraphDef graph_def;
status = ReadBinaryProto(tensorflow::Env::Default(), graph_fn,
&graph_def);

protobuf 格式确实只是一个容器,并没有说明它包含什么。在 TensorFlow 中,这种格式通常用于包含图和元图,这可能会造成混淆。

关于c++ - 无法使用 ReadBinaryProto Tensorflow 加载 Protocol Buffer ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51843259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com