TensorFlow以什么顺序计算计算图中的节点?

TensorFlow以什么顺序计算计算图中的节点?,tensorflow,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.Grad

我在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)`
(请注意,prob不是用来定义损失函数的。这是因为sigmoid_cross_熵在其定义中内部应用了sigmoid) 稍后,我将在以下行中运行优化器:

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在会话期间计算图中节点的顺序有关,但我不确定。问题可能是什么?

这不是图表的问题,只是你在看不同的东西

在第一个示例中,您提供:

result,step\u loss,\uu=sess.run(fetches=[output,loss,optimizer],feed\u dict={x:np.array([[x,y,x*x,y*y,x*y]]),y:[[1,0]}

您正在将运行
output
op的结果保存在
result
python变量中

在第二个例子中:

result,step\u loss,\uu=sess.run(fetches=[prob,loss,optimizer],feed\u dict={x:np.array([[x,y,x*x,y*y,x*y]]),y:[[1,0]}

您正在将
prob
op的结果保存在
result
python变量中

由于两个操作都不同,因此可以预期它们返回的值会不同

你可以跑

logits,activation,step\u loss,sess.run(fetches=[output,prob,loss,optimizer],…)


检查您的结果。

问题是,当我针对测试集运行时,我根本不使用prob。事实上,我使用以下方法进行测试:
result=sess.run(fetches=output,feed\u dict={x\:[[x\,Y\,x\*x\,Y\*Y\],x\*Y\]]测试时,我不会在任何地方使用prob。然而,在训练期间用prob替换fetch中的输出会导致测试阶段表现不佳。