Machine learning 增加培训数据并不意味着';不要减少CNN中的过度装配

Machine learning 增加培训数据并不意味着';不要减少CNN中的过度装配,machine-learning,speech-recognition,conv-neural-network,lasagne,audio-analysis,Machine Learning,Speech Recognition,Conv Neural Network,Lasagne,Audio Analysis,我正在处理一个CNN分类问题: 使用CNN将音频情绪分为6类(愤怒、厌恶、恐惧、快乐、悲伤、中性)。我使用的是EMODB数据集,输入特征是傅里叶变换[256*36]。我的CNN网络有3-4个卷积层,每个conv有最大池,加上一个完全连接的层。但学习曲线显示训练和验证损失之间存在很大差距,表明严重的过度拟合。我能得到的最佳验证准确率总是在75%到80%之间 这是我得到的一条学习曲线。黑色和蓝色分别是训练精度和损失。另外两个用于验证准确性和损失。即使训练损失为0,验证结果也不会再改善 我曾尝试扩充我

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

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

我曾尝试扩充我的数据集,将50%的辍学率添加到fc层,将l2正则化添加到fc层,并使用学习率衰减策略(如caffe中的“inv”)。但差距仍然存在

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

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

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

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

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


谢谢大家!

你可以尝试在你的CNN中添加一些“退出”层,看看它是否能减少过度拟合Venkat

你可以尝试在你的CNN中添加一些“退出”层,看看它是否能减少过度拟合Venkat

您可以尝试使用学习曲线来更清楚地诊断问题。您描述了如何生成培训数据。测试呢?它是从单独的录音,也削减到小块?录音之间有什么关系?他们来自不同的演讲者吗?不同的时间?@JohnYetter是的,我使用了学习曲线。我的x轴是纪元数。验证精度在0.7到0.8之间几乎保持不变,甚至在这之后下降。验证损失也是如此。我在帖子中添加了一个数字。@lejlot为了培训和验证,数据是以相同的方式生成的,但来自不同的音频。对于测试,我使用了中间值1.2s,精度接近验证精度。我还尝试从一个音频中裁剪出几个1.2秒的样本,并输出主要的预测标签作为最终预测。精度可以提高一点,但还远远不够。以这种方式,我的测试音频是有限的。所有音频都是从同一数据集中随机选取的。该数据集包含不同人的音频,每个人都以不同的情绪重复几个句子。有没有办法获得一个学习曲线图,将损失与训练集的大小进行比较,而不是训练时间?这通常很有启发性。你提到你使用了正则化。这有多大帮助?最后,你能让一个人拿你1.2秒的样本集,对一个合理的样本进行分类吗。1.2秒并不是很多信息,因为它是从一个较长的剪辑中随机抽取的,它可能不包含情感的明确指示。如果一个人在80%的时间里都做对了,你可能会遇到剪辑格式的限制。你可以尝试使用学习曲线来更清楚地诊断问题。您描述了如何生成培训数据。测试呢?它是从单独的录音,也削减到小块?录音之间有什么关系?他们来自不同的演讲者吗?不同的时间?@JohnYetter是的,我使用了学习曲线。我的x轴是纪元数。验证精度在0.7到0.8之间几乎保持不变,甚至在这之后下降。验证损失也是如此。我在帖子中添加了一个数字。@lejlot为了培训和验证,数据是以相同的方式生成的,但来自不同的音频。对于测试,我使用了中间值1.2s,精度接近验证精度。我还尝试从一个音频中裁剪出几个1.2秒的样本,并输出主要的预测标签作为最终预测。精度可以提高一点,但还远远不够。以这种方式,我的测试音频是有限的。所有音频都是从同一数据集中随机选取的。该数据集包含不同人的音频,每个人都以不同的情绪重复几个句子。有没有办法获得一个学习曲线图,将损失与训练集的大小进行比较,而不是训练时间?这通常很有启发性。你提到你使用了正则化。这有多大帮助?最后,你能让一个人拿你1.2秒的样本集,对一个合理的样本进行分类吗。1.2秒并不是很多信息,因为它是从一个较长的剪辑中随机抽取的,它可能不包含情感的明确指示。我