Keras:使用验证数据时形状错误

时间:2017-03-05 18:52:58

标签: keras

尝试向model.fit添加验证,但无论何时我都会收到错误:

ValueError: Cannot feed value of shape (6, 4, 10) for Tensor 'lstm_input_1:0', which has shape '(32, 4, 10)'

型号:

data_dim = 10
timesteps = 4
batch_size = 32

model = Sequential()
model.add(LSTM(128, batch_input_shape=(batch_size, timesteps, data_dim), return_sequences=True, stateful=True))
model.add(LSTM(64, return_sequences=True, stateful=True))
model.add(LSTM(32, stateful=True))
model.add(Dense(2, activation='softmax'))

sgd = SGD(lr=0.001, momentum=0.0, decay=0.0, nesterov=False)
model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy'])

model.fit(x_train, y_train, nb_epoch=50, batch_size=batch_size, validation_split=0.5)

可能是什么错误?如果我删除validation_split,培训就可以了。我还尝试手动将我的训练集拆分为两个,然后用validation_data=(x_val, y_val)添加它,但我得到了完全相同的错误。

1 个答案:

答案 0 :(得分:1)

问题来自于您硬编码输入的batch_size值。您已将其修复为32,然后当您尝试验证模型时,验证数据将与一批6个样本一起发送,这可能是因为您没有足够的验证数据或者因为样本数量不足32的倍数...但是,如果我是你,我会让batch_size免费。像这样:

model.add(LSTM(128, input_shape=(timesteps, data_dim), return_sequences=True, stateful=True))

您指定input_shape而不是batch_input_shape。这样,您的网络将接受任何大小的批处理,模型流中的每一层都可以适应任何batch_size(如果没有硬编码)。

我希望这会有所帮助:)