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は、セッション中に、グラフ内のノードを計算する順番とは何かを持っている感じがありますが、私はよく分かりません。何が問題なの?
問題は、テストセットに対して実行すると、私は全くprobを使用しないということです。実際、私は以下のテストを使ってテストしています: 'result = sess.run(fetches = output、feed_dict = {x_:[X_、Y_、X_ * X_、Y_ * Y_、X_ * Y_]]});' I私がテストしているときにどこでもprobを使用しないでください。しかし、トレーニング中にフェッチで出力をprobに置き換えると、テストステージのパフォーマンスが低下します。 – user308485