我使用CNN进行短文本分类(对产品标题进行分类)。 代码来自 http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/
训练集,测试集,validatino集的准确性受到打击:
和损失是不同的。验证损失是训练集和测试集丢失的两倍。(我无法上传超过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
起初我认为它是过度装备。但是模型在测试集中表现良好然后训练集。所以我很困惑!
测试集和训练集之间的分布是否有很大差异?
如何提高验证集的性能?
答案 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]中的批量大小,其他超参数值似乎没问题。
我想对培训,验证和测试集发表评论。训练数据分为培训和验证集,用于培训,而测试集是我们不接触的数据,仅用于测试我们的模型。我认为您的验证集是'测试集',您的测试集是'验证集'。这就是我引用它们的方式。