执行 sess.run 时,张量流如何处理计算图?



当我们使用下面的代码时:

output = NeuralNetwork(x,W)
loss = Loss(output, true_label)
train_op = Optimizer.minimize(loss)
sess.run([loss, train_op], feed_dict=feed)

TensorFlow 是否计算output两次,一次用于计算损失,一次用于计算梯度,还是仅计算一次ouput,使用计算output来计算lossgradient? 谢谢!

编辑。 当 TensorFlow 运行时,运行以下代码:

output = NeuralNetwork(x,W)
ouput_plus_one = output+1
loss = Loss(output, true_label)
train_op = Optimizer.minimize(loss)
sess.run([output_plus_one, train_op], feed_dict=feed)

在这种情况下,张量流是否检测到output_plus_onetrain_op子图之间的重叠子图,然后先计算output

output

只会计算一次,然后保留在内存中,直到向后传递使用它。

在 TensorFlow 中可以进行一些优化,如果张量计算速度快但很大并且会在内存中放置很长时间,我们可能会丢弃输出并在下次需要时重新计算它。

最新更新