机器学习 - 增加训练数据不会减少 CNN 中的过拟合



我正在研究一个CNN分类问题:
利用CNN将音频情绪分为6类(愤怒、厌恶、恐惧、快乐、悲伤、中性)。我使用的是EMODB数据集,输入特征是傅里叶变换[256*36]。我的CNN网络有3-4个卷积层,每个卷积都有最大池化,再加上一个完全连接的层。但学习曲线显示训练和验证损失之间存在很大差距,表明严重的过拟合。我能得到的最佳验证精度总是在75%到80%之间。

这是我得到的学习曲线之一。黑色和蓝色分别代表训练准确率和损失。另外两个是验证的准确性和损失。即使训练损失为0,验证结果也不再改善。

我尝试扩大我的数据集,向fc层添加50%的dropout,向fc层添加l2正则化,并使用学习率衰减策略(如caffe中的"inv")。但差距仍然存在。

是因为我的数据集太小了吗?
我总共有大约500个音频,并将其扩展到大约6000个样本。但是当我将数据增加到15,000时,差距仍然很大。对CNN来说,15000个数据集还算小吗?

是因为数据增强过程引入了错误吗?
我的原始数据集包含大约500个不同长度的音频,从15到6不等。我只是随机抽取了1.2s的样本。持续时间越长,得到的样本越多。现在我可以有超过15000个样本用于训练。我在想,对于较长的音频,一个1.2s的样本会丢失太多的信息,可能无法代表相应的情绪特征。但这是我能想到的最好的方法,因为由于某种原因,我不能使用RNN或HMM来处理数据。

有可能是我的特征计算出错了吗?(尽管我已经检查过好几次了)我也尝试过MFSC特征[120*40],但两个特征集有类似的过拟合问题。

还是因为我的网络不够好?我认为更复杂的网络会带来更多的过拟合。但简单的没有表现出良好的性能。

尽管我列出了许多过拟合的原因,但我无法找出哪些是影响性能的真正因素。有办法知道是哪一部分出了问题吗?或者有什么减少过度拟合的建议吗?

谢谢!

你可以尝试在你的CNN中添加一些'dropout'层,看看它是否会减少过拟合。——引导

最新更新