Operation.run()
的feed_dict
参数(以及Session.run()
和Tensor.eval()
)接受将Tensor
对象(通常为tf.placeholder()
张量)映射到numpy数组(或可以简单转换的对象)的字典到一个numpy数组)。
在您的情况下,您传递的是batch_xs
,它是numpy数组的列表,而TensorFlow不知道如何将其转换为numpy数组。假设batch_xs
定义如下:
batch_xs = [np.random.rand(100, 100),
np.random.rand(100, 100),
..., # 29 rows omitted.
np.random.rand(100, 100)] # len(batch_xs) == 32.
我们可以使用以下方法将batch_xs
转换为32 x 100 x 100
数组:
# Convert each 100 x 100 element to 1 x 100 x 100, then vstack to concatenate.
batch_xs = np.vstack([np.expand_dims(x, 0) for x in batch_xs])
print batch_xs.shape
# ==> (32, 100, 100)
请注意,如果batch_ys
是浮点数列表,则batch_ys
将透明地将其转换为一维numpy数组,因此您无需转换此参数。
编辑:mdaoust使一个有效点意见:如果你传递数组列表为np.array
(因此如在价值feed_dict
),它会自动vstack
版,所以应该不需要你的输入转换如我所建议。相反,听起来您的列表元素的形状不匹配。尝试添加以下内容:
assert all(x.shape == (100, 100) for x in batch_xs)
...在调用train_step.run()
,这应该显示您是否不匹配。
0
我正在尝试实现使用我自己的图像集训练的简单逻辑回归模型,但是当我尝试训练模型时却出现此错误:
我正在提供给
train_step.run({x: batch_xs, y_: batch_ys})
是这样的:我究竟做错了什么?提前谢谢!
编辑1 :它接缝的问题是我必须在将
batch_xs
的张量传递给train_step.run(...)
之前对其进行train_step.run(...)
。我以为run方法可以解决这个问题,但是我想我错了?无论如何,所以一旦我在调用函数之前这样做了:编辑2 :即使按照下面的答案建议,我也遇到了几个问题。最后,我放弃了张量并使用了numpy数组来修复所有问题。
希望这对别人有帮助