None 使用梯度下降优化数据时的价值

None Value while optimizing data with gradient descent

我正在尝试在 tensorflow 中制作一个小型神经网络,我对此有点陌生。我在教程 (http://de.slideshare.net/tw_dsconf/tensorflow-tutorial) 中看到了这一点,并且一切正常,直到我尝试优化权重(使用梯度下降),因为我得到一个 Null 值。

with tf.Session() as sess:
x = tf.placeholder("float",[1,3],name="x")
w = tf.Variable(tf.random_uniform([3,3]),name="w")
y = tf.matmul(x,w)
labels = tf.placeholder("float",[1,3],name="labels")
relu_out = tf.nn.relu(y)
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(relu_out,labels,name="loss")
optimizer = tf.train.GradientDescentOptimizer(0.5)
train_op = optimizer.minimize(cross_entropy)
e_labels = np.array([[1.0,1.0,0.0]])
sess.run(tf.initialize_all_variables())
for step in range(10):
    [out,loss] = sess.run([train_op,cross_entropy],feed_dict={x:np.array([[1.0,2.0,3.0]]),labels: e_labels})
print("the result is:",out)
print("The loss of the function is:",loss)   

直到现在我更改了标签值 (e_labels) 和输入值 (x),但无论如何我总是得到 None 结果。我的问题是:那个 None 值正常吗?我不这么认为,但如果有人能告诉我,我会很高兴知道我能做什么以及如何解决它。

我假设您的意思是 out 的值(即 sess.run([train_op, cross_entropy], ...) 中的第一个 return 值)是 None.

这是完全正常train_optf.Operation, and when you pass a tf.Operation to tf.Session.run()(引用文档)"The corresponding fetched value will be None."

您可以将 tf.Operation 视为具有 void return 类型的函数(在 C 或 Java 等语言中)。这是你 run() 导致副作用(即更新变量)的东西,但它本身没有有意义的 return 值。