ari*_*an 0 python deep-learning conv-neural-network lstm keras
我正在尝试将 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')
Run Code Online (Sandbox Code Playgroud)
错误发生在第一个 LSTM 层:
ERROR: Input 0 is incompatible with layer lstm_12: expected ndim=3, found ndim=2
Run Code Online (Sandbox Code Playgroud)
LSTM 层的输入应该是一个表示序列或时间序列的 3D 数组(这就是错误试图说明的内容:)expected ndim=3。但是,在您的模型中,LSTM 层的输入(实际上是它之前的 Dense 层的输出)是一个二维数组(即found ndim=2)。要使其成为 shape 的 3D 数组(n_samples, n_timesteps, n_features),一种解决方案是使用一个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'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1162 次 |
| 最近记录: |