原始博客文章声称,使用预训练的词嵌入 (glove.6B.100d) 仅在 2 个 epoch 之后,就有可能在验证集(20 个新闻组数据集)上获得 95% 的准确率。所有代码都位于此处。在这个例子中我没有做任何改变,但是在 2 个 epoch 之后验证集的准确率只有 40%,在 10 个 epoch 之后只有 75%。即使经过 20 个 epoch,我也无法达到 95% 的准确率。从 tensorflow 切换到 theano 后端不会产生任何重大变化。我正在使用 Keras 2.0.2、tensorflow-gpu 1.0.1、theano 0.9.0、python 2.7.12。我做错了什么?
在 keras 预训练的词嵌入示例上获得低准确率
数据挖掘
Python
张量流
喀拉斯
2022-03-04 17:30:23
2个回答
代码已更改为删除标题。见 github 上的评论:
“新闻组消息包含像'Newsgroups:alt.atheism'这样的标题,它将准确性夸大为0.95(2个时期)。删除标题后,val准确度为0.47(2个时期)和0.71(10个时期)。”
https://github.com/fchollet/keras/pull/5585
这让我困惑了好几天!
它可能是使用的 20 个新闻组数据的版本。http://qwone.com/~jason/20Newsgroups/提供了两个版本的数据集:(1) 原始版本 (2) 另一个版本删除了重复项并删除了标题,从而泄露了实际组。该数据集也已经分为训练和测试。
当我加载原始数据集(带有重复项和标题)并使用您引用的代码时,我可以在三个时期后达到 ~93-95%。
当我加载数据集的第二个版本(仅限训练)时,需要更多的 epoch 才能收敛,10 个 epoch 后的验证准确率只有 55% 左右。验证准确性仍处于上升轨道,因此您应该能够改进这些结果。
因此,我认为重复/过滤严重扭曲了您提到的博客的结果。当标题包含应该分类的新闻组时,分类更容易。较低的准确性是对数据的更真实的评估。
另请注意,如果您使用 scikit-learn (sklearn.datasets.fetch_20newsgroups) 加载数据集,它会加载数据集的第二个版本。具有多项朴素贝叶斯的 tf-idf 模型在数据上达到约 50%,因此 RNN 仍然无法执行基线模型。不过,在 20 个新闻组的第二版中,95% 似乎并不现实。
其它你可能感兴趣的问题