2017-02-21 3 views
0

TensorFlowに奇妙なバグがあります。TensorFlowはどのような順序で計算グラフのノードを評価しますか?

output = (tf.matmul(layer_3,w_out) + b_out) 
prob = tf.nn.sigmoid(output); 
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits = output, targets = y_, name=None)) 
optimizer = tf.train.GradientDescentOptimizer(learning_rate = learning_rate).minimize(loss, var_list = model_variables)` 

(sigmoid_cross_entropyは、その定義の内部シグモイドを適用するためであるとPROBは、損失関数を定義するために使用されていません注意してください。) I後で実行:次のコード、簡単なフィードフォワードニューラルネットワークの一部を考えてみましょう次の行のオプティマイザ:

result,step_loss,_ = sess.run(fetches = [output,loss,optimizer],feed_dict = {x_ : np.array([[x,y,x*x,y*y,x*y]]), y_ : [[1,0]]}); 

上記の作業は問題ありません。しかし、代わりにコードを実行するために次の行を実行すると、ネットワークには何の違いもないはずですが、ひどく実行されているようです。

result,step_loss,_ = sess.run(fetches = [prob,loss,optimizer],feed_dict = {x_ : np.array([[x,y,x*x,y*y,x*y]]), y_ : [[1,0]]}); 

私はそれがTFは、セッション中に、グラフ内のノードを計算する順番とは何かを持っている感じがありますが、私はよく分かりません。何が問題なの?

答えて

0

グラフに問題はありません。さまざまなことを見ているだけです。

あなたが提供する最初の例では:

result,step_loss,_ = sess.run(fetches = [output,loss,optimizer],feed_dict = {x_ : np.array([[x,y,x*x,y*y,x*y]]), y_ : [[1,0]]})

あなたはresultのpython変数にoutput OPの実行結果を保存しています。二一

result,step_loss,_ = sess.run(fetches = [prob,loss,optimizer],feed_dict = {x_ : np.array([[x,y,x*x,y*y,x*y]]), y_ : [[1,0]]})

あなたはresultのpython変数にprob OPの結果を保存しています。

両方の操作が異なるため、それらによって返される値が異なることが予想されます。

あなたの結果を確認するために

logits, activation, step_loss, _ = sess.run(fetches = [output, prob, loss, optimizer], ...)

を実行することができます。

+0

問題は、テストセットに対して実行すると、私は全くprobを使用しないということです。実際、私は以下のテストを使ってテストしています: 'result = sess.run(fetches = output、feed_dict = {x_:[X_、Y_、X_ * X_、Y_ * Y_、X_ * Y_]]});' I私がテストしているときにどこでもprobを使用しないでください。しかし、トレーニング中にフェッチで出力をprobに置き換えると、テストステージのパフォーマンスが低下します。 – user308485

関連する問題