【发布时间】:2018-02-22 17:22:08
【问题描述】:
我正在尝试创建一个 keras LSTM 来预测时间序列。我的 x_train 的形状像 3000,15,10(示例,时间步长,特征),y_train 像 3000,15,1,我正在尝试构建多对多模型(每个序列 10 个输入特征产生 1 个输出/序列)。
我使用的代码是这样的:
model = Sequential()
model.add(LSTM(
10,
input_shape=(15, 10),
return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(
100,
return_sequences=True))
model.add(Dropout(0.2))
model.add(Dense(1, activation='linear'))
model.compile(loss="mse", optimizer="rmsprop")
model.fit(
X_train, y_train,
batch_size=512, nb_epoch=1, validation_split=0.05)
但是,我在使用时无法拟合模型:
model.add(Dense(1, activation='linear'))
>> Error when checking model target: expected dense_1 to have 2 dimensions, but got array with shape (3000, 15, 1)
或以这种方式格式化时:
model.add(Dense(1))
model.add(Activation("linear"))
>> Error when checking model target: expected activation_1 to have 2 dimensions, but got array with shape (3000, 15, 1)
在添加密集层之前,我已经尝试过压平模型(model.add(Flatten())),但这只是给了我ValueError: Input 0 is incompatible with layer flatten_1: expected ndim >= 3, found ndim=2。这让我很困惑,因为我认为我的数据实际上是 3 维的,不是吗?
代码来源于https://github.com/Vict0rSch/deep_learning/tree/master/keras/recurrent
【问题讨论】:
-
既然是多对多,为什么要设置
return_sequences=False?尝试在第二个LSTM中将其设置为True。 -
嗨,Marcin,我将其更改为
True,但仍然出现相同的错误。 -
你能更新你的代码 sn-p 吗?您使用哪个版本的
keras?您是否 100% 确定这是同一条消息? -
更新了 sn-p,我正在使用 1.2.2(使用 Python 2.7.5)。错误是
Error when checking model target: expected activation_1 to have 2 dimensions, but got array with shape (3000, 15, 1),我使用的是model.add(Dense(1)) model.add(Activation("linear"))格式。 -
现在我明白了。您使用的是相对较旧的
keras版本。试试:model.add(TimeDistributed(Dense(1))).
标签: python multidimensional-array keras lstm