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

时间:2017-02-21 06:28:35

标签: 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)`

(请注意,prob不用于定义损失函数。这是因为sigmoid_cross_entropy在其定义中内部应用了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在会话期间计算图表中节点的顺序有关,但我不确定。问题是什么?

1 个答案:

答案 0 :(得分: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]]})

您正在output python变量中保存运行result 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]]})

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

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

你可以运行

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

检查结果。