有很多方法可以解决在TensorFlow中保存模型的问题,这可能会使它有些混乱。依次处理您的每个子问题:
检查点文件(例如产生通过调用
saver.save()
一个上tf.train.Saver
对象)只包含的权重,并且在相同程序中定义的任何其它变量。要在另一个程序中使用它们,您必须重新创建关联的图形结构(例如,通过运行代码以再次构建它,或调用tf.import_graph_def()
),这告诉TensorFlow如何处理这些权重。请注意,调用saver.save()
还会产生一个包含的文件metaGraphDef
,该文件包含一个图形以及如何将检查点的权重与该图形相关联的详细信息。有关更多详细信息,请参见教程。tf.train.write_graph()
只写图结构;不是重量。Bazel与读取或写入TensorFlow图无关。(也许我误会了您的问题:请随时在评论中予以澄清。)
冻结的图可以使用加载
tf.import_graph_def()
。在这种情况下,权重(通常)嵌入在图形中,因此您无需加载单独的检查点。主要更改将是更新输入到模型中的张量的名称以及从模型中获取的张量的名称。在TensorFlow Android演示中,这将与传递给的
inputName
和outputName
字符串相对应TensorFlowClassifier.initializeTensorFlow()
。的
GraphDef
是该程序的结构,其通常不通过训练过程而改变。检查点是训练过程状态的快照,通常在训练过程的每个步骤都会改变。结果,TensorFlow对这些类型的数据使用不同的存储格式,并且低级API提供了不同的方式来保存和加载它们。更高级别的库,如metaGraphDef
图书馆,Keras和skflow对这些机制的构建提供更加便捷的方式来保存和恢复整个模型。



