我试图修改TensorFlow MNIST示例,以便在生成结果之前将占位符输入值传递给变量进行操作。
例如:
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问题,但我以前从未见过这种特殊情况。
提前感谢任何建议!
答案 0 :(得分:0)
因为input_x和var_x都应该是784长度向量。
这不完全正确。 Input_x的形状为[None,784],你的var_x的形状为[784]。
不幸的是,我不确切地知道你要做什么......
我基本上希望它与普通的MNIST示例中的矩阵乘法完全相同,但是使用变量而不是占位符。
如果你想使用变量而不是占位符,你可以说
input_x = tf.Variable(tf.float32, preloaded_digits_numpy_array)
将其余代码保留为......