Keras阵列输入错误

时间:2016-12-20 18:07:36

标签: numpy machine-learning tensorflow deep-learning keras

我收到以下错误:

ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 6 arrays but instead got the following list of 3 arrays: [array([[ 0,  0,  0, ..., 18, 12,  1],
       [ 0,  0,  0, ..., 18, 11,  1],
       [ 0,  0,  0, ..., 18,  9,  1],
       ...,
       [ 0,  0,  0, ..., 18, 15,  1],
       [ 0,  0,  0, ..., 18,  9,  ...

在我的keras模型中。

我认为模型错误了什么?

当我向模型提供输入时会发生这种情况。相同的输入在另一个程序中运行良好。

2 个答案:

答案 0 :(得分:4)

如果没有更多信息,就无法诊断出您的确切问题。

我通常会根据训练数据input_shape指定第一层的X参数。

e.g。

model = Sequential()
model.add(Dense(32, input_shape=X.shape[0]))

我认为您希望X看起来像这样:

   [
    [[ 0,  0,  0, ..., 18, 11,  1]],
    [[ 0,  0,  0, ..., 18,  9,  1]],
   ....
   ]

所以你可以尝试使用以下行重新整形:

X = np.array([[sample] for sample in X])

答案 1 :(得分:0)

问题实际上来自于向网络提供错误的输入。

在我的情况下,问题是我的自定义图像生成器将整个数据集作为输入而不是某对图像标签传递。这是因为我认为Keras的generator.flow(x,y,batch_size)内部已经有一个yield结构,但是正确的生成器结构应该如下(具有单独的yield):

def generator(batch_size):

(images, labels) = utils.get_data(1000) # gets 1000 samples from dataset
labels = to_categorical(labels, 2)

generator = ImageDataGenerator(featurewise_center=True,
                 featurewise_std_normalization=True,
                 rotation_range=90.,
                 width_shift_range=0.1,
                 height_shift_range=0.1,
                 zoom_range=0.2)

generator.fit(images)

gen = generator.flow(images, labels, batch_size=32)

while 1:
    x_batch, y_batch = gen.next()
    yield ([x_batch, y_batch])

我意识到这个问题已经过时了,但可能会节省一些时间让某人找到问题。