我有一个神经网络,其中有两个隐藏层。每个隐藏层有 128 个神经元。输入层有 20 个输入,输出层有 3 个输出。
我有 100 万条数据记录。80% 用于训练网络,20% 用于验证。我运行了 100000 个 epoch 的训练。
我看到神经网络仅在 12000 个 epoch 之后就在训练数据上达到了 100% 的准确度。
我应该停止训练还是继续训练直到所有 100000 个 epoch 都完成?请解释一下原因。
我有一个神经网络,其中有两个隐藏层。每个隐藏层有 128 个神经元。输入层有 20 个输入,输出层有 3 个输出。
我有 100 万条数据记录。80% 用于训练网络,20% 用于验证。我运行了 100000 个 epoch 的训练。
我看到神经网络仅在 12000 个 epoch 之后就在训练数据上达到了 100% 的准确度。
我应该停止训练还是继续训练直到所有 100000 个 epoch 都完成?请解释一下原因。
首先,正如@Neil Slater 在评论中提到的那样——您需要将训练集、验证集和测试集分成三个部分。
有时会忽略验证集和测试集之间的区别。但是,它们用于不同的目的。在这里我想引用https://machinelearningmastery.com/difference-test-validation-datasets/:
验证数据集:用于在调整模型超参数时对模型拟合在训练数据集上的无偏评估的数据样本。随着验证数据集的技能被纳入模型配置,评估变得更加有偏见。
测试数据集:用于提供对训练数据集拟合的最终模型的无偏评估的数据样本。
其次,为了了解正在发生的事情,将火车和验证损失共同绘制。如果验证数据的性能变得更差,那么在训练中 - 最好终止训练,因为这是过度拟合的迹象。
一个好的做法是使用提前停止,在 Tensorflow 中有这个回调的实现 - https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/EarlyStopping。