用于短文本分类的CNN在验证集中执行不良

时间:2016-12-27 02:38:10

标签: machine-learning tensorflow deep-learning

我使用CNN进行短文本分类(对产品标题进行分类)。 代码来自 http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/

训练集,测试集,validatino集的准确性受到打击: enter image description here

和损失是不同的。验证损失是训练集和测试集丢失的两倍。(我无法上传超过2张图片。抱歉!)

训练集和测试集来自网络爬虫,然后用7:3拆分。验证来自真实应用消息,并通过手动标记进行标记。

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

我尝试了上采样,下采样,无采样。

批量大小为1024,2048,5096

0.3,0.5,0.7

的退出

embedding_size with 30,50,75

但这些都不起作用!

现在我使用下面的参数:

批量大小为2048。

embedding_size是30。

sentence_length是15

filter_size是3,4,5

dropout_prob是0.5

l2_lambda是0.005

起初我认为它是过度装备。但是模型在测试集中表现良好然后训练集。所以我很困惑!

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

如何提高验证集的性能?

2 个答案:

答案 0 :(得分:0)

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

  

训练集和测试集来自网络爬虫,然后拆分它们   使用7:3。验证来自真实应用消息,并通过手册>标记。标记

模型在培训期间没有看到任何真实的应用程序消息数据,因此毫无疑问无法在验证集上提供良好的结果。传统上,所有三个集合都是从相同的数据池生成的(例如,使用7-1-2分割)。验证集用于超参数调整(batch_size,embedding_length等),而测试集则用于客观测量模型性能。

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

答案 1 :(得分:0)

我认为验证集的损失很大,因为验证数据来自真实应用消息数据,这可能比您从网络爬行中获得的可能包含噪声的训练数据更加真实。您的学习率非常高,批量大小,如果比建议的大。您可以尝试[0.1,0.01,0.001和0.0001]中的学习率,[32,64]中的批量大小,其他超参数值似乎没问题。

我想对培训,验证和测试集发表评论。训练数据分为培训和验证集,用于培训,而测试集是我们不接触的数据,仅用于测试我们的模型。我认为您的验证集是'测试集',您的测试集是'验证集'。这就是我引用它们的方式。