当前位置: 首页 > 面试题库 >

TensorFlow保存到文件中/从文件中加载图形

白星海
2023-03-14
问题内容

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

  1. 使用a将模型的变量保存到检查点文件(.ckpt)中,tf.train.Saver()并在以后还原它们(源)
  2. 将模型保存到.pb文件,然后使用tf.train.write_graph()tf.import_graph_def()(source)将其加载回
  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有什么区别?

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

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


问题答案:

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

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

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

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

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

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

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



 类似资料:
  • 问题内容: 我正在尝试从文件中加载图像而不使用。这些文件夹是: 我想将图像加载到资产文件夹中。我试过了: 我已经尝试过使用字符串路径“ /TestProject/assets/drawIcon.png”,但是什么也没有。我不知道如何加载该图片! 问题答案: 将目录设置为资源目录,然后从“ /drawIcon.png”位置将图像加载为资源: 如果要创建javafx图像: 在这种情况下,也请将该文件夹

  • 我正在生成。Liferay portlet中的svg文件将保存在服务器(JBoss AS)上的svg文件夹中。这些文件生成并保存在中。java类,如下所示: 该文件保存在server/bin/svg目录中。但是当我试图访问我的数据库中的文件时。jsp页面,它似乎找不到文件(可能正在另一个目录中查找)。我怎样才能告诉它,所需的文件在哪里?我可以使用绝对路径,将其存储在某个位置并将其传递给。jsp页面

  • 问题内容: Go的新手(我正在研究的第一个简单项目)。 问题:如何从URL获取图像,然后将其保存到计算机中? 这是我到目前为止的内容: 但是,当我运行此代码时,我得到 我假设我必须将image.Image(变量)转换为未定义的字节数?那是解决这个问题的正确方法吗? 问题答案: 无需解码文件。只需将响应正文复制到您打开的文件中即可。这是修改后的示例中的交易: 是数据流,并实现了接口-意味着您可以按顺

  • 我想把一个html文件加载到WebView中。 请注意,在so上有很多相关的问题,但它们都涉及从资产文件夹获取**.html*。 但是我想从本地文件夹加载html文件,比如“d://abc.html”,因为如果我的html大约是10MB,那么相应的apk大小也会增加到10MB。

  • 我很想知道如何保存和加载两个HashMaps,我一直在尝试使用自己的方法,但我什么都想不通,因为一个正在覆盖另一个! 这是我的主要.class 这是我的潜艇.class 正如我在一开始提到的,地图会互相覆盖,我不知道如何解决这个问题!