优化器通常会在许多步骤中运行相同的计算图,直到收敛。张量流是否在开始时设置图并在每个步骤中重用它?如果我在训练期间更改批量大小会怎样?如果我对图表进行一些减值更改(例如更改损失函数)会怎样?如果我对图表进行一些重大更改会怎样?张量流是否预先生成所有可能的图?当图发生变化时,tensorflow是否知道如何优化整个计算?
As 凯维曼 说,从客户端的角度来看,有一个 TensorFlow 图。运行时可以有多个pruned仅包含计算值所需的节点的子图t1
, t2
等你调用时获取的sess.run([t1, t2, ...]).
如果你打电话sess.run([t1, t2])
将修剪整个图(sess.graph
)到计算这些值所需的子图:即产生的操作t1
and t2
以及他们所有的前身。如果您随后致电sess.run([t3, t4])
,运行时会将图修剪为计算所需的子图t3
and t4
。每次您传递要获取的新值组合时,TensorFlow 将计算一个新的修剪图并将其缓存 - 这就是为什么第一个sess.run()
可能会比后续的慢一些。
如果修剪后的图重叠,TensorFlow 将为共享的操作重用“内核”。这是相关的,因为某些操作(例如tf.Variable and tf.FIFOQueue) are stateful,并且它们的内容可以在两个修剪图中使用。例如,这允许您使用一个子图初始化变量(例如sess.run(tf.initialize_all_variables())
),与另一个人一起训练他们(例如sess.run(train_op)
),并用第三个模型评估您的模型(例如sess.run(loss, feed_dict={x: ...})
)。它还允许您使用一个子图将元素放入队列,并使用另一个子图将它们出队,这是输入管道.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)