首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CNN模型在达到50%的准确率后对数据进行过拟合

CNN模型在达到50%的准确率后对数据进行过拟合
EN

Stack Overflow用户
提问于 2020-09-21 05:11:33
回答 1查看 415关注 0票数 5

我正在尝试根据脑电连接体数据识别3种(类)精神状态。数据的形状是99x1x34x34x50x130 (最初是图形数据,但现在表示为矩阵),分别表示对象、通道、高度、宽度、频率、时间序列。为了进行本研究,只能输入1x34x34图像的连接体数据。从以前的研究中发现,α波段(8-1 hz)提供了最多的信息,因此数据集被缩小到99x1x34x34x4x130。支持向量机等传统机器学习技术的测试集准确率达到75%左右。因此,by的目标是在给定相同数据(1x34x34)的情况下实现更高的精度。由于我的数据非常有限,1-66用于训练,66-99用于测试(固定比率和1/3类分布),我想沿着时间序列轴(第6轴)拆分数据,然后将数据平均为1x34x34的形状(来自ex。1x34x34x4x10,10是时间序列的随机样本)。这给了我大约1500个样本用于训练,33个样本用于测试(测试是固定的,类分布是1/3)。

型号:

代码语言:javascript
复制
SimpleCNN(
  (conv1): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))    
  (pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  (drop1): Dropout(p=0.25, inplace=False)
  (fc1): Linear(in_features=9248, out_features=128, bias=True)
  (drop2): Dropout(p=0.5, inplace=False)
  (fc2): Linear(in_features=128, out_features=3, bias=True)
)
CrossEntropyLoss()
Adam (
Parameter Group 0
    amsgrad: False
    betas: (0.9, 0.999)
    eps: 1e-08
    lr: 5e-06
    weight_decay: 0.0001
)

结果:通过足够的迭代,训练集可以达到100%的准确率,但代价是测试集的准确率。经过大约20-50个时期的测试后,模型开始过度拟合训练集,测试集精度开始下降(损失也是如此)。

我试过的方法:我试着调优超参数: lr=.001-000001,weight decay=0.0001-0.00001。训练到1000个时期(在不到100个时期内无用的bc过拟合)。我还尝试通过添加fc层和CNN层中不同数量的通道来增加/降低模型复杂度,从8-64。我还尝试添加更多的CNN层,但模型在测试集上的平均准确率约为45%,表现稍差。我尝试手动计划每10个时期的学习率,结果是相同的。重量衰减似乎对结果影响不大,从0.1%到0.000001。

从以前的测试中,我有一个模型,在测试和训练集上都达到了60%的访问率。然而,当我尝试重新训练它时,两个集合(训练和测试)的acc立即下降到~40,这是没有意义的。我已经尝试将学习率从0.01%改变到0.00000001,并为此尝试了权重衰减。

从模型和图表的训练来看,模型似乎不知道它在前5-10个时期做了什么,然后开始快速学习,在两个集合上都有大约50%-60%的acc。这就是模型开始过度拟合的地方,从那里开始,模型在训练集上的acc增加到100%,而测试集的acc下降到33%,这相当于猜测。

有什么建议吗?

编辑:

测试集的模型输出彼此非常非常接近。

代码语言:javascript
复制
0.33960407972335815, 0.311821848154068, 0.34857410192489624

每个图像的预测之间的整个测试集的平均标准差为(softmax):

代码语言:javascript
复制
0.017695341517654846

然而,训练集的平均标准差是.22,所以...

F1分数:

代码语言:javascript
复制
Micro Average: 0.6060606060606061
Macro Average: 0.5810185185185186
Weighted Average: 0.5810185185185186
Scores for each class: 0.6875 0.5 0.55555556

这是一个混淆矩阵:

EN

回答 1

Stack Overflow用户

发布于 2020-09-23 06:40:52

我有一些建议,我会尝试的,也许你已经做到了:

  • 增加了辍学的概率,这可以减少过拟合,
  • 我没有看到或错过了它,但如果你不这样做,洗牌所有的样本,
  • 没有那么多的数据,你有没有想过使用其他神经网络来生成更多的数据的类,具有最低的分数?我不确定这里是不是这样,但即使是随机旋转,缩放图像也可以产生更多的训练示例,
  • 另一种方法,如果你还没有这样做,使用另一个流行的CNN网络使用转移学习,看看它是如何做的工作,然后你可以有一些比较,无论是你的架构问题或它缺乏示例:)我知道这些只是建议,但也许,如果你还没有尝试过其中的一些,它们会让你更接近解决方案。祝你好运!
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63983710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档