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

如何将文献中的1D-CNN模型转化并实现为Keras模型?

1D-CNN模型复现问题解答

一、模型图中“25x1x3”的含义

这个标注对应1D卷积层的三个核心参数:

  • 25:卷积层的过滤器(filters)数量,即该层输出的特征通道数
  • 1:输入数据的通道数(对应你设置的input_shape=(12,1),说明输入是单变量时序数据)
  • 3:卷积核大小(kernel_size),也就是卷积操作时的滑动窗口长度

二、修正后的Keras模型代码

你的原始代码存在维度不兼容、冗余层、激活函数误用等问题,以下是贴合文献模型结构的修正版本:

import keras
from keras.models import Sequential
from keras.layers import Dense, Conv1D, Flatten

# 构建符合文献结构的1D-CNN模型
model = Sequential()
# 第一个Conv1D层:对应标注的25x1x3
model.add(Conv1D(filters=25, kernel_size=3, activation='relu', input_shape=(12, 1)))
# 展平层:将卷积输出的三维张量转为二维,适配全连接层输入要求
model.add(Flatten())
# 全连接层:25个神经元,ReLU激活
model.add(Dense(25, activation='relu'))
# 第二、第三个Conv1D层:注意若要在全连接层后再次使用卷积,需先reshape回三维格式(但这种结构不常见)
# 若文献模型是连续卷积后接全连接,更合理的结构如下:
# model = Sequential()
# model.add(Conv1D(filters=25, kernel_size=3, activation='relu', input_shape=(12, 1)))
# model.add(Conv1D(filters=50, kernel_size=3, activation='relu'))
# model.add(Conv1D(filters=100, kernel_size=3, activation='relu'))
# model.add(Flatten())
# model.add(Dense(2200, activation='relu'))
# model.add(Dense(2, activation='softmax'))

# 查看模型结构,确认各层维度是否匹配
model.summary()

关键修正说明

  1. 维度转换:Conv1D层输出是(None, 时序步数, 过滤器数)的三维张量,直接接Dense层会报错,必须通过Flatten()或全局池化层转为二维张量。
  2. 冗余层移除:你代码中Dense(2, activation='relu')属于冗余层,分类任务最后只需一个Dense(2, activation='softmax')输出两类概率。
  3. 结构合理性:若文献模型是Conv1D→Dense→Conv1D的结构,需用Reshape()将Dense输出转回三维,但这种设计在1D-CNN分类任务中较少见,建议优先确认文献模型的层级顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:30:47