Tensorflow - 将占位符值分配给变量

时间:2017-04-26 12:35:59

标签: python machine-learning tensorflow mnist

我试图修改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问题,但我以前从未见过这种特殊情况。

提前感谢任何建议!

1 个答案:

答案 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) 

将其余代码保留为......