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

如何在Keras的Conv1D函数中正确配置input_shape参数?

问题原因与解决方案

第一次报错原因

  • Conv1D默认使用VALID无填充卷积,输出序列长度计算公式为:输出长度 = 输入序列长度 - kernel_size + 1
  • 你设置的输入形状为(1, num_features),即序列长度仅为1,第一层卷积核大小为3,代入公式得到输出长度为1-3+1=-1,负维度不符合计算要求,因此报错。

第二次报错原因

  • Conv1D要求输入为3维张量,格式为(批量大小, 序列长度, 单步特征数),你修改后的输入形状(n_hidden_1, num_features, 1)为4维格式,适配的是Conv2D而非Conv1D
  • 4维输入经过卷积后输出仍为4维,而MaxPooling1D仅支持3维输入,因此抛出维度不匹配错误。

正确修改方案

1. 数据集维度调整

你当前单条样本是6个连续数值对应1个分类标签,因此需将全量数据集reshape为(样本总数, 6, 1)格式,即每条样本看作长度为6的一维序列,每个序列位置的特征数为1。

2. 模型代码修正

num_features = 6
num_classes = 3
n_hidden_1 = 64
n_hidden_2 = 32

model = Sequential()
# 输入形状对应(序列长度, 单步特征数),加same padding避免维度缩小过快
model.add(Conv1D(filters=n_hidden_1, kernel_size=3, activation='sigmoid', 
        input_shape=(6, 1), padding='same'))
model.add(Conv1D(filters=n_hidden_2, kernel_size=3, activation='sigmoid', padding='same'))
model.add(Dropout(0.5))
# 池化大小不超过当前序列长度
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(num_classes, activation='softmax'))

如果不想使用same填充,可调整卷积核大小和池化大小匹配维度变化即可:

model = Sequential()
# 无填充第一层输出长度:6-3+1=4
model.add(Conv1D(filters=n_hidden_1, kernel_size=3, activation='sigmoid', input_shape=(6, 1)))
# 无填充第二层输出长度:4-2+1=3
model.add(Conv1D(filters=n_hidden_2, kernel_size=2, activation='sigmoid'))
model.add(Dropout(0.5))
# 池化大小匹配序列长度3
model.add(MaxPooling1D(pool_size=3))
model.add(Flatten())
model.add(Dense(num_classes, activation='softmax'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:36:02