machine-learning - Huggingface Trainer load_best_model f1 分数与损失和过度拟合

标签 machine-learning optimization nlp pytorch huggingface-transformers

我训练了一个 roberta-large 并指定了 load_best_model_at_end=Truemetric_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/

相关文章:

c++ - 编译器会把这个表达式优化成一个临时常量而不是每次迭代都解析它吗?

python - 有效计算python中的词频

matlab - MATLAB 文档中给出的用于训练多个神经网络的示例代码中存在错误

performance - 如何提高Entity Framework 4.0大模型的启动性能?

machine-learning - Tesauro 的 TD-Gammon 中的板编码

c# - 不使用 if 语句四舍五入一个数字

python - python 中字符串中变音符号/重音符号的替换

parsing - 如何获得粗粒度的词性标签?

r - 使用神经网络功能时出现错误

python - 在生产中训练机器学习