2017-02-23 5 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) 

は、二度の損失を計算するための1、勾配を計算するための1つをtensorflowコンピュートoutputを行い、または一度だけouputを計算し、lossgradientを計算するために計算されたoutputを使用していますか? ありがとう!

編集。 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を計算tensorflowですか?

答えて

1

outputは、1回計算された後、逆方向パスがそれを消費するまでメモリに保持されます。

TensorFlowでは、テンソルが高速で計算時間が長くて長時間メモリに座ってしまうと、出力を破棄して次回に必要なときに再計算できる可能性があります。

+0

上記の2番目の質問では、テンソルフローは 'output_plus_one'と' train_op'の部分グラフの間に重なったサブグラフを検出してから 'output'を先に計算しますか?ありがとう – Keith

+0

'output'はグラフ上の1つのノードです。その出力テンソルは2つのノードによって消費される。それだ。テンソルフローのpythonレイヤーは、出力を計算するために作成されたノードが1つだけであることを確認します。 – yuefengz

関連する問題