You need to enable JavaScript to run this app. 如何在Keras中为维度为(2505,10)的EEG数据设计CNN分类模型
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keras中为维度为(2505,10)的EEG数据设计CNN分类模型

错误原因

Keras 中Conv2D层要求输入为4维张量,格式为(样本数, 高度, 宽度, 通道数),你当前输入的数据集维度为(253, 2505, 10),缺少了最后一维的图像通道维度(灰度图对应通道数为1),因此触发维度不匹配报错。

调整方案

1. 扩充数据集维度

在训练数据的最后一维新增通道维度,将3维数据转换为适配2D CNN的4维格式:

X_train = np.array(X_train)
# 新增最后一维的通道维度,转换后形状为 (样本数, 2505, 10, 1)
X_train = np.expand_dims(X_train, axis=-1)
# 若存在测试集,也需要做相同的维度扩充
# X_test = np.expand_dims(X_test, axis=-1)
y_train = np.array(y_train)

2. 补全模型结构

你当前的模型只有卷积和池化层,缺少输出分类结果的全连接部分,同时可以显式指定输入形状避免维度歧义,调整后的模型代码如下:

model = models.Sequential()
# 显式指定输入形状:(时间步长, 脑叶数, 通道数)
model.add(layers.Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=(2505, 10, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
# 展平卷积输出,接入全连接层
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
# 二分类输出层
model.add(layers.Dense(no_classes))

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

可选优化建议

针对二分类任务,你可以简化模型配置,降低冗余:

  • 将输出层改为1个神经元搭配sigmoid激活,损失函数换成二元交叉熵,更适配二分类场景:
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
              loss=tf.keras.losses.BinaryCrossentropy(),
              metrics=['accuracy'])
  • 如果需要更侧重时间维度的特征提取,可以将卷积核改为(3,1),仅在时间维度滑动,避免破坏脑叶维度的特征独立性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:06:00