当我们使用下面的代码时:
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
来计算loss
和gradient
? 谢谢!
编辑。 当 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_one
和train_op
子图之间的重叠子图,然后先计算output
?
output
只会计算一次,然后保留在内存中,直到向后传递使用它。
在 TensorFlow 中可以进行一些优化,如果张量计算速度快但很大并且会在内存中放置很长时间,我们可能会丢弃输出并在下次需要时重新计算它。