我应该选择验证准确度最高的模型还是训练和验证准确度均值最高的模型?

人工智能 深度学习 训练 准确性 交叉验证 早停
2021-11-02 17:59:34

我正在Keras一些图像上训练一个深度网络以进行二进制分类(我有大约 12K 图像)。偶尔,我会收集一些误报并将它们添加到我的训练集中并重新训练以获得更高的准确性。

我将训练分成 20/80% 用于训练/验证集。

现在,我的问题是:我应该使用哪个结果模型?始终是具有更高验证准确度的那个,或者可能是训练和验证准确度平均值更高的那个?你更喜欢这两者中的哪一个?

Epoch #38: training acc: 0.924, validation acc: 0.944
Epoch #90: training acc: 0.952, validation acc: 0.932
2个回答

上述两种方法都不能成为模型性能的有效指标。

一种简单的方法来训练模型以使其在未知数据集上很好地泛化是监控验证损失。一旦验证损失在多个时期逐渐增加,就应该停止训练。超过这一点,模型会学习数据中的统计噪声并开始过度拟合

在此处输入图像描述

这种提前停止技术可以借助回调函数在 Keras 中实现:

class EarlyStop(tf.keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs={}):
        if(logs.get('val_loss') < LOSS_THRESHOLD and logs.get('val_categorical_accuracy') > ACCURACY_THRESHOLD):
            self.model.stop_training = True

callbacks= EarlyStop()
model.fit(...,callbacks=[callbacks])

在模型试运行后,可以通过监控验证/训练误差图来估计损失和准确度阈值。

训练准确度不会告诉你它在其他数据上的表现如何,而不是在它所学习的数据上,它可能在这些数据上更好,因为它记住了这些例子。

另一方面,验证集在这里向您表明模型将其学到的知识推广到新数据的能力如何(希望测试数据集准确地代表数据的多样性)。

当您正在寻找对每个数据集都适用的模型时,您不想使用训练准确性来选择模型,因此您应该选择第一个。