微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Keras 询问有关 EEG 分类的建议

如何解决使用 Keras 询问有关 EEG 分类的建议

我有一个 EEG 数据集,形状如下:

(11,1158,200)

哪里

11 is the number of EEG channel
1158 is the number of each task
200 is the time interval of each task

例如,如果你绘制一个任务,你会得到(注意数据是标准化的):

enter image description here

这个任务代表一个有类的任务。 (例如看到第 2 类的图片,我的数据集中的类总数为 5)。

现在我将数组转换为这种形状:

(1158,200,11)

这样模型就可以区分每个任务。这是我使用的模型:

opt = keras.optimizers.Adam(learning_rate=1e-4)

model = Sequential()
model.add(Conv1D(filters=128,kernel_size=64,activation='relu',input_shape=(200,11)))
model.add(Conv1D(filters=64,kernel_size=8,activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100,activation='relu'))
model.add(Dense(5,activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer=opt,metrics=['accuracy'])
model.fit(x_train,y_train,validation_data=(x_valid,y_valid),epochs=50,batch_size=16)

我尝试了许多不同的超参数,但我所有的结果都有些像这样:

Epoch 50/50
58/58 [==============================] - 0s 5ms/step - loss: 0.1281 - accuracy: 0.9946 - val_loss: 2.7850 - val_accuracy: 0.1897

训练准确率高,但验证准确率在 20% 到 25% 之间(100/5 = 20,其中 5 是类数);这基本上意味着模型会随机预测一些东西。我的方法错了吗?如果是这样,我应该如何解决这个问题?

解决方法

由于您的数据本质上是一个时间序列分类问题,我的直觉是从基于 LSTM 的东西开始。

遗憾的是,我的第二个见解与数据大小有关。您的特征空间为 200x11=2200,样本大小为 1158。如果样本大小 >5 * 特征大小,我倾向于考虑使用深度学习,但实际上认为 DL 开始以 10 倍左右的比率发光。如果收集更多数据不太现实,那么您将需要寻找其他解决方案来解决高方差问题(模型对于可用数据级别而言过于复杂)。

第三,我可以评论您的数据形状在我看来是正确的,假设您将验证集标准化并塑造成与训练集等效的形状,那么这可能不是问题。

编辑:我刚刚注意到训练的最后一个时期显示训练样本的 58/58。该值表示训练集中的样本数。这是你期待的吗?我预计样本数量是 EG 810/810 总集的 70%。 如果您不确定我在问什么,请发布 y_train 和 y_valid 的大小。这可能有助于我自己和其他人验证培训过程。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。