You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras中如何将CNN输出传入LSTM替代全连接网络

修改CNN+LSTM+Dense网络结构方案

核心修改思路

  1. 保留原有的CNN特征提取部分,移除Flatten层——因为LSTM需要接收序列格式的输入((时间步长, 特征数)),扁平化会丢失序列维度信息
  2. 在CNN输出后添加LSTM层,利用其序列建模能力替代原全连接层
  3. LSTM输出后接Dropout和最终分类Dense层

修改后的完整代码

inputt = Input(shape=(x_train.shape[1], x_train.shape[2]))
# 原CNN特征提取模块不变
output = Conv1D(filters=64, kernel_size=4, activation='relu')(inputt)
output = MaxPooling1D(pool_size=4)(output)
output = Dropout(0.2)(output)
output = Conv1D(filters=64, kernel_size=4, activation='relu')(output)
output = MaxPooling1D(pool_size=4)(output)
output = Dropout(0.2)(output)

# 替换全连接为LSTM层
output = LSTM(64, activation='relu')(output)  # units数量可根据需求调整,默认return_sequences=False
output = Dropout(0.5)(output)

# 最终二分类输出层
output = Dense(2, activation='softmax')(output)

model = Model(inputs=inputt, outputs=output)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

关键细节说明

  • 输入形状匹配:经过两次Conv1D+MaxPooling1D后,CNN输出形状为(None, 30, 64)(None对应batch size,30为序列长度,64为特征数),完全符合LSTM的输入格式要求
  • LSTM参数调整:如果需要堆叠多层LSTM,需将前一层的return_sequences设为True,示例如下:
    output = LSTM(64, activation='relu', return_sequences=True)(output)
    output = LSTM(32, activation='relu')(output)
    
  • 激活函数修正:原代码中中间层使用softmax不合理,替换为LSTM后仅在最终分类层使用softmax(二分类也可改用sigmoid,需对应调整损失函数为binary_crossentropy)

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:10:47