我使用tf.train.export_meta_graph().SerializeToString()
函数从Python获得了序列化的训练过的张量流模型。这给了我一大堆二进制数据。如下所示。
b'\n\x9a\x15\x12\x84\x15\n9\n\x03Add\x12\x06\n\x01x"\x01T\x12\x06\n\x01y"\x01T\x1a\x06\n\x01z"\x01T"\x1a\n\x01T\x12\x04type:\x0f\n\r2\x0b\x13\x01\x02\x04\x06\x05\x03\t\x08\x12\x07\n\x83\x01\n\x0cApplyAdagrad\x12\x0b\n\x03var"\x01T\x80\x01\x01\x12\r\n\x05accum"\x01T\x80\x01\x01\x12\x07\n\x02lr"\x01T\x12\t\n\x04grad"\x01T\x1a\x0b\n\x03out"\x01T\x80\x01\x01"\x1d\n\x01T\x12\x04type:\x12\n\x102\x0e\x01\x02\t\x03\x04\x11\x05\x06\x08\x12\x0b\x0c\r\x13"\x17\n\x0buse_locking\x12\x04bool\x1a\x02
注意:这不是完整的数据,只是为了给您一个想法。
现在我想使用Tensorflow C ++ API反序列化这些数据,我不知道如何做到这一点。我成功地在Python中导入了它。
的Python :
meta_graph_def = meta_graph_pb2.MetaGraphDef()
meta_graph_def.ParseFromString(data)
with tf.Graph().as_default() as graph:
# new_saver = tf.import_graph_def(graph_def)
new_saver = tf.train.import_meta_graph(meta_graph_def)
return graph
这使用我在"data"
变量中提供的二进制数据返回正确初始化的图形。如何在C ++中实现相同的目标?
更新
我已经尝试实现相同但我收到以下错误。
error: ‘b’ was not declared in this scope
这是我用来实现同样目的的代码。
tf::GraphDef graph_def;
std::string data = "[the long binary string defined above]";
graph_def.ParseFromString(data);
我知道这与上面显示的二进制数据中的前一个b
有关,不应该与protoBuf中的C++ ParseFromString
函数兼容,因为生成了这个二进制数据来自使用SerializeToSTring()
的python protoBuf。这个问题背后的原因是什么?