2017-02-23 9 views
0

, когда мы с помощью кода ниже:Как тензорный поток обрабатывает графа вычислений при выполнении 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 для вычисления 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) 

В этом случае, не tensorflow обнаружить наложенное подграф между подграфом output_plus_one и train_op, а затем вычислить output первые?

ответ

1

output будет вычисляться только один раз, а затем храниться в памяти до тех пор, пока обратный проход не будет потреблять его.

В TensorFlow существует определенная оптимизация: если тензор быстро вычисляется, но большой и долгое время будет сидеть в памяти, мы могли бы, вероятно, отказаться от вывода и перекомпилировать его, когда нам это понадобится в следующий раз.

+0

Во втором вопросе выше. Определяет ли тензорный поток перекрывающийся подграф между подграфом 'output_plus_one' и' train_op', а затем сначала вычисляет 'output'? Спасибо – Keith

+0

'output' только один узел на графике. Его выходные тензоры будут потребляться двумя узлами. Вот и все. Уровень python shadoworflow гарантирует, что для вычисления вашего вывода будет создан только один узел. – yuefengz

Смежные вопросы