我试图在张量流中建立一个小型神经网络,而我在这方面有点新意。我在一个教程(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),但无论如何我总是得到一个无结果。我的问题是:无价值是否正常?我不这么认为,但如果有人能告诉我,我会很高兴知道我能做什么以及如何解决。
答案 0 :(得分:1)
我认为您的意思是out
的值(即sess.run([train_op, cross_entropy], ...)
的第一个返回值)是None
。
完全正常:train_op
是tf.Operation
,当您将tf.Operation
传递给tf.Session.run()
时(引用文档)相应的提取值将为None
。“
您可以将tf.Operation
视为具有void
返回类型的函数(使用C或Java等语言)。这是你run()
引起副作用(即更新变量)的东西,但它本身没有有意义的返回值。