我训练了一个模型并使用以下代码保存它:
saver = tf.train.Saver()saver.save(session, './my_model_name')
除了包含指向模型最新检查点的指针的checkpoint文件外,这会在当前路径下创建以下三个文件:
- my_model_name.meta
- my_model_name.index
- my_model_name.data-00000-of-00001
我想知道这些文件各自包含什么内容。
我想在C++中加载这个模型并运行推理。label_image示例使用ReadBinaryProto()
从单个.bp文件加载模型。我想知道如何从这三个文件中加载它。以下代码的C++等效是什么?
new_saver = tf.train.import_meta_graph('./my_model_name.meta')new_saver.restore(session, './my_model_name')
回答:
我目前也在为此挣扎,我发现目前做这件事并不简单。关于这个主题最常被引用的两个教程是:https://medium.com/jim-fleming/loading-a-tensorflow-graph-with-the-c-api-4caaff88463f#.goxwm1e5j和https://medium.com/@hamedmp/exporting-trained-tensorflow-models-to-c-the-right-way-cf24b609d183#.g1gak956i
以下代码的等效形式是
new_saver = tf.train.import_meta_graph('./my_model_name.meta')new_saver.restore(session, './my_model_name')
只是
Status load_graph_status = LoadGraph(graph_path, &session);
假设你已经“冻结了图”(使用了一个将图文件与检查点值结合的脚本)。另外,请参阅此讨论:Tensorflow 在C++中导出和运行图的不同方式