在什么阶段设置了张量流图?

use*_*467 5 tensorflow tensorflow-serving

优化器通常为许多步骤运行相同的计算图,直到收敛.tensorflow是否在开始时设置图形并在每个步骤中重复使用它?如果我在培训期间更改批量大小怎么办?如果我改变损失函数对图表做一些减号怎么办?如果我对图表做了一些重大更改怎么办?张量流是否预先生成所有可能的图形?当图表发生变化时,tensorflow是否知道如何优化整个计算?

mrr*_*rry 7

正如凯文曼所说,从客户的角度来看,只有一个TensorFlow图.在运行时,可以有多个修剪包含只是所必需的计算值的节点子图t1,t2你打电话时取等sess.run([t1, t2, ...]).

如果调用sess.run([t1, t2])将消减整体图(sess.graph)下降到计算这些值所需的子:即生产操作t1t2与他们所有的来路.如果随后调用sess.run([t3, t4]),运行时将修剪下来计算所需的子图t3t4.每次将一个新的值组合传递给fetch时,TensorFlow将计算一个新的修剪图并对其进行缓存 - 这就是为什么第一个sess.run()可能比后续的慢一些.

如果修剪的图形重叠,TensorFlow将重用"内核"作为共享的操作.这是相关的,因为一些操作(例如tf.Variabletf.FIFOQueue)是有状态的,并且它们的内容可以在两个修剪的图中使用.例如,这允许您使用一个子图(例如sess.run(tf.initialize_all_variables()))初始化变量,用另一个子图(例如)训练它们sess.run(train_op),并用第三个(例如sess.run(loss, feed_dict={x: ...}))评估您的模型.它还允许您使用一个子图将元素排入队列,并使用另一个子图将它们排队,这是输入管道的基础.


kev*_*man 5

TensorFlow只公开一个用户可见的图形,即用户指定的图形.用户可以使用Session.run()或通过调用Tensor.eval()某个张量来运行图形.一个Session.run()电话可以指定要喂一些张量和要获取他人.根据需要获取的内容,TensorFlow运行时可以在内部构建和优化各种数据结构,包括用户可见图的修剪版本.但是,无论如何,用户都看不到此内部图形.不,TensorFlow不会"预生成"所有可能的图形.是的,TensorFlow会对计算图执行大量优化.最后,更改馈送的张量的批量大小不会改变图形的结构.