尝试向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)
添加它,但我得到了完全相同的错误。
答案 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(如果没有硬编码)。
我希望这会有所帮助:)