我训练了一个 roberta-large 并指定了 load_best_model_at_end=True
和 metric_for_best_model=f1
。在训练过程中,我可以看到在第 6 个 epoch 之后出现过度拟合,这是最佳点。在下一个要评估的 Epoch 8 中,由于梯度累积,我们可以看到训练损失减少,eval_loss 增加。因此,过度拟合开始了。 Transformers 训练器最终从 epoch 8、检查点 -14928
加载模型,因为 f1 分数有点高。我想知道,从理论上讲,第 6 纪元的模型不是更适合吗,因为它没有过度拟合?或者即使模型确实过度拟合,人们是否真的会选择 f1 指标? (评估损失在<6个时期持续下降)。
第二个检查点的 test_loss(随后被加载为“最佳”)为 0.128。是否可以使用第一个检查点来降低该值,无论如何这应该是更好的模型?
checkpoint-11196:
{'loss': 0.0638, 'learning_rate': 8.666799323450404e-06, 'epoch': 6.0}
{'eval_loss': 0.09599845856428146, 'eval_accuracy': 0.9749235986101227, 'eval_precision': 0.9648319293367138, 'eval_recall': 0.9858766505097777, 'eval_f1': 0.9752407721241682, 'eval_runtime': 282.2294, 'eval_samples_per_second': 84.637, 'eval_steps_per_second': 2.647, 'epoch': 6.0}
VS.
checkpoint-14928:
{'loss': 0.0312, 'learning_rate': 7.4291115311909265e-06, 'epoch': 8.0}
{'eval_loss': 0.12377820163965225, 'eval_accuracy': 0.976305103194206, 'eval_precision': 0.9719324391455539, 'eval_recall': 0.9810295838208257, 'eval_f1': 0.9764598236566295, 'eval_runtime': 276.7619, 'eval_samples_per_second': 86.309, 'eval_steps_per_second': 2.699, 'epoch': 8.0}
最佳答案
您可以直接评论 metric_for_best_model='f1'
出去看看,损失是默认设置。或者,利用from_pretrained('path/to/checkpoint')
连续比较两个检查点。 F 分数对阈值敏感,因此完全有可能较低的损失检查点最终会更好(假设您确实优化了阈值)。
关于machine-learning - Huggingface Trainer load_best_model f1 分数与损失和过度拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73232595/