首页 文章

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

提问于
浏览
4

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

2 回答

  • 6

    作为keveman says,从客户端的角度来看,有一个TensorFlow图 . 在运行时中,可以有多个修剪的子图,它们只包含计算调用sess.run([t1, t2, ...])时获取的值 t1t2 等所必需的节点 .

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

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

  • 5

    TensorFlow仅公开一个用户可见的图形,即用户指定的图形 . 用户可以使用Session.run()或在某个张量上调用Tensor.eval()来运行图形 . Session.run() 调用可以指定要提供的一些张量和要提取的其他张量 . 根据需要获取的内容,TensorFlow运行时可以在内部构建和优化各种数据结构,包括用户可见图的修剪版本 . 但是,无论如何,用户都看不到此内部图形 . 不,TensorFlow没有't '预先生成' all possible graphs. Yes, TensorFlow does perform extensive optimizations on the computation graph. And finally, changing the batch size of a tensor that is fed doesn' t更改图形的结构 .

相关问题