machine-learning - Keras:为什么'accuracy'比'val_acc'高?
问题描述
我已经编译了一个模型,metrics=['accuracy']
我得到的值总是高于验证准确度val_acc
。例如:
Epoch 19/20
53/53 [==============================] - 280s - loss: 0.3931 - acc: 0.8238 - val_loss: 0.5002 - val_acc: 0.7757
Epoch 20/20
53/53 [==============================] - 278s - loss: 0.3957 - acc: 0.8255 - val_loss: 0.5009 - val_acc: 0.7754
accuracy: 0.790697674418604
任何人都知道这两个值的计算方式不同吗?
更新
我在 Keras 2.0.8 上。通过“准确性”,我指的是最后一行accuracy: 0.790697674418604
。我没有为它提供测试集,所以我想知道它测试的是什么。
解决方案
在训练期间,样本再次被分成 2 个内部子集。一个用于实际训练,另一个用于每个 epoch 之后的验证。拆分的比率可以通过参数“validation_split”来控制,如下所示(来自 Keras 的示例)
h = model.fit(X_train, Y_train, batch_size=200, epochs=50, verbose=2, validation_split=0.2)
现在,来到日志中,“acc”指的是训练对象的准确性。'val_acc' 指的是验证集。请注意,val_acc 指的是在训练期间未向网络显示的一组样本,因此指的是您的模型在训练集之外的情况下的工作量。
验证准确度低于准确度是很常见的。但理想情况下,您应该努力将这些值保持在同一水平。如果验证准确度远低于准确度,那么您肯定是过度拟合(如上例所示)——准确度为 84,验证准确度为 77。
编辑:关于日志最后一行中的“准确性”,即在所有时期针对测试数据集运行后网络的准确性。这通常比准确度更接近“val_acc”(如上例中为 79)。这只是意味着测试数据中的样本比上一个时期运行的验证数据中的样本更接近(请记住,这两个集合都不用于训练)
无论如何,我认为您应该调整以确保“acc”和“val_acc”以及最终的“准确度”更接近彼此
推荐阅读
- c++ - 如何从可执行文件中删除所有调试和个人信息?
- django - 在 ModelChoiceField 或 ModelMultipleChoiceField 中搜索的最简单方法是什么?
- android - Windows 10 上的颤振医生错误:CreateProcessW 失败 5
- python - 如何在 RNN 中调整 Keras 的训练集、测试集和验证集?
- c# - 如何根据指针位置而不是玩家位置拾取物体?
- google-maps - 如何显示带有标记位置的基本地图?
- node.js - 现在如何设置 index.html?
- angularjs - ng-show 在可操作的列中不起作用
- django - Django - 无论文件扩展名如何,唯一的上传文件名
- 7zip - 7z:是否可以有条件地排除文件?