2017-02-14 156 views
2

我试图将一维数组转换为TF矩阵,用于卷积网络,类似于它在TF深层MNIST示例中的做法通过使用tf.reshape()尝试将向量转换为矩阵后tf.reshape()出错

X = tf.placeholder(tf.float32, [None, 480]) 
X = tf.reshape(X, shape=[-1, 60, 8, 1]) 

我收到以下错误:

ValueError: Cannot feed value of shape (5, 480) for Tensor 'Reshape_1:0', which has shape '(?, 60, 8, 1)' 

5是我batch_size和480是原始数组的长度。我想将它转换为60x8张量,加上1个输出通道,所以我使用TF MNIST示例使用目标形状[-1, 60, 8, 1]

  1. 任何想法,为什么我得到这个?看起来像在MNIST示例中,他们使用-1来将单行调整为AxA矩阵并为输出通道添加一个额外维度?
  2. 我甚至可以使用这种非方矩阵,还是会给我一个错误的道路?我试着做类似400 = 20x20的东西,以及只是为了查看错误是否是由不均匀的形状造成的,但仍然出现错误...

回答

2

在您的第一行代码中,您定义了一个占位符并将其存储在python变量X中。在第二行代码中,您定义了一个整形运算符并将其存储在python变量X中。现在,您已覆盖X的前一个值并失去对占位符的访问权限。您正在尝试向占位符中添加一个值,但实际上将它提供给重塑操作员。如果你为这些变量使用不同的名字,那么你将不会看到这个错误。

+0

谢谢,这是做到了。我保持这种方式,因为TF的例子有这种方式,但现在你提到它,可能它在那里工作,因为X重塑是在一个函数中定义的,将预重塑的X作为变量传递给它,所以也许这就是为什么TF允许它在那里......谢谢! –

+0

重要的是不要将python变量与tensorflow变量混淆。 python变量只是指向tensorflow的指针。 – Aaron