TensorFlow保存到文件中/从文件中加载图形
python
tensorflow
4
0

从到目前为止的经验来看,有几种不同的方法可以将TensorFlow图转储到文件中,然后再将其加载到另一个程序中,但是我无法找到关于它们如何工作的清晰示例/信息。我已经知道的是:

  1. 使用tf.train.Saver()将模型的变量保存到检查点文件(.ckpt tf.train.Saver() ,并在以后还原它们(
  2. 将模型保存到.pb文件中,然后使用tf.train.write_graph()tf.import_graph_def() )将其加载回
  3. 从.pb文件加载模型,对其进行重新训练,然后使用Bazel将其转储到新的.pb文件中(
  4. 冻结图形以将图形和权重保存在一起(
  5. 使用as_graph_def()保存模型,对于权重/变量,将它们映射到常量(

但是,我无法清除有关这些不同方法的几个问题:

  1. 关于检查点文件,它们仅保存模型的训练权重吗?是否可以将检查点文件加载到新程序中并用于运行模型,还是仅将它们用作在特定时间/阶段将权重保存在模型中的方法?
  2. 关于tf.train.write_graph() ,权重/变量也被保存了吗?
  3. 关于Bazel,它只能保存到.pb文件中或从其中加载以进行重新训练吗?是否有一个简单的Bazel命令只是将图形转储到.pb中?
  4. 关于冻结,可以使用tf.import_graph_def()加载冻结图吗?
  5. TensorFlow的Android演示从.pb文件加载到Google的Inception模型中。如果我想替换自己的.pb文件,我该怎么做?我需要更改任何本机代码/方法吗?
  6. 通常,所有这些方法之间到底有什么区别?或更广泛地说, as_graph_def() ckpt/.pb有什么区别?

简而言之,我正在寻找一种将图形(如各种操作等)及其权重/变量都保存到文件中的方法,然后可将其用于将图形和权重加载到另一个程序中,以供使用(不一定要继续/训练)。

关于该主题的文档不是很简单,因此,非常感谢您提供任何答案/信息。

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

有很多方法可以解决在TensorFlow中保存模型的问题,这可能会使它有些混乱。依次处理您的每个子问题:

  1. 检查点文件(例如,通过在tf.train.Saver对象上调用saver.save() tf.train.Saver )仅包含权重以及在同一程序中定义的任何其他变量。要在另一个程序中使用它们,您必须重新创建关联的图形结构(例如,通过运行代码以再次构建它,或调用tf.import_graph_def() ),这告诉TensorFlow如何处理这些权重。请注意,调用saver.save()还会生成一个包含MetaGraphDef的文件,该文件包含一个图形以及如何将检查点的权重与此图形相关联的详细信息。有关更多详细信息,请参见教程

  2. tf.train.write_graph()只写图结构;不是重量。

  3. Bazel与读取或编写TensorFlow图无关。 (也许我误会了您的问题:请随时在评论中加以澄清。)

  4. 可以使用tf.import_graph_def()加载冻结的图。在这种情况下,权重(通常)嵌入在图形中,因此您无需加载单独的检查点。

  5. 主要更改将是更新输入到模型中的张量的名称以及从模型中获取的张量的名称。在TensorFlow Android演示中,这将与传递到TensorFlowClassifier.initializeTensorFlow()inputNameoutputName字符串相对应。

  6. GraphDef是程序结构,通常在训练过程中不会改变。该检查点是训练过程状态的快照,通常在训练过程的每个步骤都会改变。因此,TensorFlow对这些类型的数据使用不同的存储格式,并且低级API提供了不同的保存和加载方式。更高级别的图书馆,如MetaGraphDef库, Kerasskflow对这些机制的构建提供更加便捷的方式来保存和恢复整个模型。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号