Keras LSTM输入尺寸设置

时间:2018-01-07 19:56:50

标签: python tensorflow deep-learning keras lstm

我正在尝试使用keras训练LSTM模型,但我认为我在这里遇到了一些问题。

我收到错误

  

ValueError:检查输入时出错:预期lstm_17_input有   3个维度,但得到了具有形状的数组(10000,0,20)

虽然我的代码看起来像

model = Sequential()
model.add(LSTM(256, activation="relu", dropout=0.25, recurrent_dropout=0.25, input_shape=(None, 20, 64)))
model.add(Dense(1, activation="sigmoid"))
model.compile(loss='binary_crossentropy',
          optimizer='adam',
          metrics=['accuracy'])
model.fit(X_train, y_train,
      batch_size=batch_size,
      epochs=10)

其中X_train的形状为(10000, 20),前几个数据点就像

array([[ 0,  0,  0, ..., 40, 40,  9],
   [ 0,  0,  0, ..., 33, 20, 51],
   [ 0,  0,  0, ..., 54, 54, 50],
...

y_train的形状为(10000, ),这是一个二进制(0/1)标签数组。

有人能指出我错在哪里吗?

1 个答案:

答案 0 :(得分:13)

为了完整起见,这里发生了什么。

首先,LSTM与Keras中的所有图层一样,接受两个参数:input_shapebatch_input_shape。区别在于input_shape 不包含批量大小,而batch_input_shape完整输入形状,包括批量大小

因此,规范input_shape=(None, 20, 64)告诉keras期望一个4维输入,这不是你想要的。正确的只是(20,)

但并非全部。 LSTM层是一个循环层,因此它需要一个三维输入(batch_size, timesteps, input_dim)。这就是正确规范为input_shape=(20, 1)batch_input_shape=(10000, 20, 1)的原因。此外,您的训练阵列也应重新整形,以表示每步的{1}}时间步长和20输入功能。

因此,解决方案:

1