use*_*467 5 tensorflow tensorflow-serving
优化器通常为许多步骤运行相同的计算图,直到收敛.tensorflow是否在开始时设置图形并在每个步骤中重复使用它?如果我在培训期间更改批量大小怎么办?如果我改变损失函数对图表做一些减号怎么办?如果我对图表做了一些重大更改怎么办?张量流是否预先生成所有可能的图形?当图表发生变化时,tensorflow是否知道如何优化整个计算?
正如凯文曼所说,从客户的角度来看,只有一个TensorFlow图.在运行时,可以有多个修剪包含只是所必需的计算值的节点子图t1
,t2
你打电话时取等sess.run([t1, t2, ...])
.
如果调用sess.run([t1, t2])
将消减整体图(sess.graph
)下降到计算这些值所需的子:即生产操作t1
和t2
与他们所有的来路.如果随后调用sess.run([t3, t4])
,运行时将修剪下来计算所需的子图t3
和t4
.每次将一个新的值组合传递给fetch时,TensorFlow将计算一个新的修剪图并对其进行缓存 - 这就是为什么第一个sess.run()
可能比后续的慢一些.
如果修剪的图形重叠,TensorFlow将重用"内核"作为共享的操作.这是相关的,因为一些操作(例如tf.Variable
和tf.FIFOQueue
)是有状态的,并且它们的内容可以在两个修剪的图中使用.例如,这允许您使用一个子图(例如sess.run(tf.initialize_all_variables())
)初始化变量,用另一个子图(例如)训练它们sess.run(train_op)
,并用第三个(例如sess.run(loss, feed_dict={x: ...})
)评估您的模型.它还允许您使用一个子图将元素排入队列,并使用另一个子图将它们排队,这是输入管道的基础.
TensorFlow只公开一个用户可见的图形,即用户指定的图形.用户可以使用Session.run()
或通过调用Tensor.eval()
某个张量来运行图形.一个Session.run()
电话可以指定要喂一些张量和要获取他人.根据需要获取的内容,TensorFlow运行时可以在内部构建和优化各种数据结构,包括用户可见图的修剪版本.但是,无论如何,用户都看不到此内部图形.不,TensorFlow不会"预生成"所有可能的图形.是的,TensorFlow会对计算图执行大量优化.最后,更改馈送的张量的批量大小不会改变图形的结构.
归档时间: |
|
查看次数: |
792 次 |
最近记录: |