我试图修改TensorFlow MNIST示例,以便在生成结果之前将占位符输入值传递给操作变量。Tensorflow - 将占位符值分配给变量
例如:
import tensorflow as tf
# create placeholder/weights/biases
input_x = tf.placeholder(tf.float32, [None, 784])
input_W = tf.Variable(tf.zeros([784, 10]))
input_b = tf.Variable(tf.zeros([10]))
# Create the new variable
var_x = tf.Variable(tf.zeros([784]), trainable=False)
# Perform an arbitrary manipulation on MNIST input, and assign to var_x
for i in range(0,784):
var_x[i].assign(input_x[i]/2)
input_Y = tf.matmul(var_x, input_W) + input_b
在上面的例子中,我通过占位符值input_X成var_X,哪里可以通过权重相乘,以获得输出结果之前,对值执行任意操作,。
,我发现了以下错误的tf.matmul:
ValueError: Shape must be rank 2 but is rank 1 for 'MatMul' (op: 'MatMul') with input shapes: [784], [784,10].
我很困惑,为什么在上面的例子中,这个工程:
tf.matmul(input_x, input_W) + input_b
但这并不:
tf.matmul(var_x, input_W) _ input_b
由于input_x和var_x都应该是784长度的向量。
我基本上希望它与正常MNIST示例中的矩阵乘法完全相同,但使用变量而不是占位符。
这似乎应该是超级直观,但我是TensorFlow的新手,尽管阅读了很多教程/ SO问题,但我从未在任何地方见过这种特殊场景。
在此先感谢您的任何建议!
感谢您的答复,对不起,如果它不清楚。我想正常地将数字加载到占位符中,但在计算结果之前对这些值进行一些操作。 – inkbleed
对不起,我的评论去掉了。 我想补充: 所以在上面的例子中,我将占位符的馈送值减半。同样,我可能想占用占位符值,并将它们合并或平均它们等等。我可能希望最终对多个变量执行此操作,因此input_x需要与更新/ matmul'd变量分开。 希望更清楚!欢呼 – inkbleed
嗯,在这种情况下,为什么不用numpy来执行这个操作,然后把它送入图表? – rmeertens