Machine learning 短文本分类的CNN在验证集中执行错误

Machine learning 短文本分类的CNN在验证集中执行错误,machine-learning,tensorflow,deep-learning,Machine Learning,Tensorflow,Deep Learning,我正在使用CNN进行短文本分类(对制作标题进行分类)。 代码来自 培训集、测试集、验证集的精度为: 而损失则不同。验证的丢失是训练集和测试集丢失的两倍。(我不能上传超过2张图片。对不起!) 训练集和测试集由crawler从web上获取,然后以7:3的比例拆分。验证来自真实的应用程序消息,并通过手动标记进行标记 我尝试了几乎所有的超参数 我试过上采样、下采样、无采样 批量大小为102420485096 辍学率为0.3、0.5、0.7 嵌入尺寸为30、50、75 但是这些都不行 现在我使用下面的

我正在使用CNN进行短文本分类(对制作标题进行分类)。 代码来自

培训集、测试集、验证集的精度为:

而损失则不同。验证的丢失是训练集和测试集丢失的两倍。(我不能上传超过2张图片。对不起!)

训练集和测试集由crawler从web上获取,然后以7:3的比例拆分。验证来自真实的应用程序消息,并通过手动标记进行标记

我尝试了几乎所有的超参数

我试过上采样、下采样、无采样

批量大小为102420485096

辍学率为0.3、0.5、0.7

嵌入尺寸为30、50、75

但是这些都不行

现在我使用下面的参数:

批量大小为2048

你的尺寸是30

句子长度是15

过滤器的尺寸为3,4,5

辍学概率为0.5

l2_λ为0.005

一开始我认为它太过合适了。但是模型在测试集和训练集表现很好。所以我很困惑

测试集和培训集之间的分布是否有很大差异


如何提高验证集的性能?

我认为这种损失差异来自于验证数据集是从不同于培训/测试集的域中收集的:

训练集和测试集由爬虫从web上获取,然后进行拆分 7:3。验证来自真实应用程序消息,并通过手动>标记进行标记

该模型在培训期间没有看到任何真实的应用程序消息数据,因此它在验证集上无法提供良好的结果也就不足为奇了。传统上,这三个数据集都是从同一个数据池生成的(例如,7-1-2分割)。验证集用于超参数调整(批量大小、嵌入长度等),而测试集用于模型性能的客观度量


如果您最终关心应用程序数据的性能,我会将该数据集拆分为7-1-2(训练验证测试)并使用网络爬虫数据增加训练数据。

我认为验证集的丢失率很高,因为验证数据来自真实的应用程序消息数据,这可能比从网络爬虫中获得的训练数据更真实,因为网络爬虫可能包含噪音。你的学习率非常高,如果批量比推荐的要大的话。您可以在[0.1,0.01,0.001和0.0001]中尝试学习速率,在[32,64]中尝试批量大小,其他超参数值似乎可以


我想谈谈培训、验证和测试集。训练数据分为训练集和验证集进行训练,而测试集是我们不接触的数据,最后只用于测试我们的模型。我认为您的验证集是“测试集”,您的测试集是“验证集”。这就是我将如何引用它们的方法。

您确定该绘图中的轨迹标记正确吗?奇怪的是,你的测试准确率是最高的。几乎肯定是不对的?@chris_anderson Thx!我确信绘图中的轨迹标记正确。我不知道为什么,验证精度太低。你能重现原始教程中的精度吗?此模型的预期验证精度是多少?@YaoZhang Thx!预期的验证精度至少为92%,就像图中的dev精度一样。经过几个小时的训练,验证损失是训练损失的6倍。我的验证集有问题吗?