【问题标题】:How to combine RNN with CNN?如何将 RNN 与 CNN 结合起来?
【发布时间】:2018-10-22 15:49:54
【问题描述】:

我正在尝试将 LSTM 与 CNN 相结合,但由于错误而卡住了。 这是我正在尝试实现的模型:

model=Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(28, 28,3), activation='relu'))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(32, activation='relu'))
model.add(LSTM(128, return_sequences=True,input_shape=(1,32), activation='relu'))
model.add(LSTM(256))
model.add(Dropout(0.25))
model.add(Dense(37))
model.compile(loss='categorical_crossentropy', optimizer='adam')

第一个 LSTM 层发生错误:

ERROR: Input 0 is incompatible with layer lstm_12: expected ndim=3, found ndim=2

【问题讨论】:

  • 为了给你一个真正好的答案,我们需要从你的数据中了解“你想成为什么序列”。你在处理图像吗?你想让一个序列像一个有很多图像的电影吗?或者您是否希望将列作为序列或行......或者它可能不是图像并且数据意味着其他东西?

标签: python keras deep-learning conv-neural-network lstm


【解决方案1】:

LSTM 层的输入应该是一个 3D 数组,它代表一个序列或时间序列(这就是错误要说的:expected ndim=3)。但是,在您的模型中,LSTM 层的输入,实际上是它之前的密集层的输出,是一个二维数组(即found ndim=2)。要将其制成形状为(n_samples, n_timesteps, n_features) 的 3D 数组,一种解决方案是使用RepeatVector 层重复它的时间步数(您需要在代码中指定):

model.add(Dense(32, activation='relu'))
model.add(RepeatVector(n_timesteps))
model.add(LSTM(128, return_sequences=True, input_shape=(n_timesteps,32), activation='relu'))

【讨论】:

猜你喜欢
  • 2017-08-29
  • 2019-04-28
  • 1970-01-01
  • 2018-12-08
  • 2012-03-17
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多