本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

报码:【j2开奖】资源 | TensorFlow极简教程:创建、保存和恢复机器学习模型(2)

时间:2017-03-19 19:34来源:118图库 作者:开奖直播现场 点击:
图(graph):你希望会话处理的图。对于初学者来说,棘手的事情是:TF 中总存在一个默认的图,其中所有操作的设置都是默认的,所以你的操作范围总在

图(graph):你希望会话处理的图。对于初学者来说,棘手的事情是:TF 中总存在一个默认的图,其中所有操作的设置都是默认的,所以你的操作范围总在一个「默认的图」中。

配置(config):你可以使用 ConfigProto 配置 TF。查看本文最后的链接资源以获取更多详细信息。

Saver 可以处理图的元数据和变量数据的保存和加载(又称恢复)。它需要知道的唯一的事情是:需要使用哪个图和变量?

默认情况下,Saver 会处理默认的图及其所有包含的变量,但是你可以创建尽可能多的 Saver 来控制你想要的任何图或子图的变量。这里是一个例子:

  import tensorflow as tf

  import os

  dir = os.path.dirname(os.path.realpath(__file__))

  # First, you design your mathematical operations

  # We are the default graph scope

  # Let's design a variable

  v1 = tf.Variable(1. , name="v1")

  v2 = tf.Variable(2. , name="v2")

  # Let's design an operation

  a = tf.add(v1, v2)

  # Let's create a Saver object

  # By default, the Saver handles every Variables related to the default graph

  all_saver = tf.train.Saver()

  # But you can precise which vars you want to save under which name

  v2_saver = tf.train.Saver({"v2": v2})

  # By default the Session handles the default graph and all its included variables

  with tf.Session() as sess:

  # Init v and v2

  sess.run(tf.global_variables_initializer())

  # Now v1 holds the value 1.0 and v2 holds the value 2.0

  # We can now save all those values

  all_saver.save(sess, dir + '/data-all.chkp')

  # or saves only v2

  v2_saver.save(sess, dir + '/data-v2.chkp')

如果查看你的文件夹,它实际上每创建 3 个文件调用一次保存操作并创建一个检查点(checkpoint)文件,我会在附录中讲述更多的细节。你可以简单理解为权重被保存到 .chkp.data 文件中,你的图和元数据被保存到 .chkp.meta 文件中。

恢复操作和其它元数据

一个重要的信息是,Saver 将保存与你的图相关联的任何元数据。这意味着加载元检查点还将恢复与图相关联的所有空变量、操作和集合(例如,它将恢复训练优化器)。

当你恢复一个元检查点时,实际上是将保存的图加载到当前默认的图中。现在你可以通过它来加载任何包含的内容,如张量、操作或集合。

  import tensorflow as tf

  # Let's load a previously saved meta graph in the default graph

  # This function returns a Saver

  saver = tf.train.import_meta_graph('results/model.ckpt-1000.meta')

  # We can now access the default graph where all our metadata has been loaded

  graph = tf.get_default_graph()

  # Finally we can retrieve tensors, operations, collections, etc.

  global_step_tensor = graph.get_tensor_by_name('loss/global_step:0')

  train_op = graph.get_operation_by_name('loss/train_op')

  hyperparameters = tf.get_collection('hyperparameters')

恢复权重

请记住,实际的权重只存在于一个会话中。这意味着「恢复」操作必须能够访问会话以恢复图内的权重。理解恢复操作的最好方法是将其简单地当作一种初始化。

  with tf.Session() as sess:

  # To initialize values with saved data

  saver.restore(sess, 'results/model.ckpt.data-1000-00000-of-00001')

  print(sess.run(global_step_tensor)) # returns 1000

在新图中使用预训练图

现在你知道了如何保存和加载,你可能已经明白如何去操作。然而,这里有一些技巧能够帮助你走得更快。

一个图的输出可以是另一个图的输入吗?

是的,但有一个缺点:我还不知道使梯度流(gradient flow)在图之间容易传递的一种方法,因为你将必须评估第一个图,获得结果,并将其馈送到下一个图。

这样一直下去是可以的,直到你需要重新训练第一个图。在这种情况下,你将需要将输入梯度馈送到第一个图的训练步骤……

我可以在一个图中混合所有这些不同的图吗?

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容