当我们使用下面的代码时:
output = NeuralNetwork(x,W)
loss = Loss(output, true_label)
train_op = Optimizer.minimize(loss)
sess.run([loss, train_op], feed_dict=feed)
张量流计算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
?
答案 0 :(得分:1)
output
只会计算一次,然后保留在内存中,直到后向传递消耗它为止。
在TensorFlow中可以进行一些优化,如果张量计算速度很快但很大并且会在内存中存在很长时间,我们可能会丢弃输出并在下次需要时重新计算它。 / p>