设置load_best_model_at_end=True后,如何确认HF Hub推送的是最优模型?
确认Hugging Face Hub推送模型的方法及指标显示问题解决
一、验证推送的是最优模型还是最后一轮模型
1. 本地直接评估验证
因为你设置了load_best_model_at_end=True,训练结束后trainer.model已经加载了最优轮次的模型。直接用它重新评估测试集,看结果是否和第7轮的最优F1匹配:
eval_results = trainer.evaluate(tokenized_datasets["test"]) print(eval_results["eval_f1"])
如果输出的F1和第7轮的最优值一致,说明推送的就是最优模型,模型卡显示的最后一轮指标只是自动生成时的日志读取问题,不代表模型本身。
2. 对比本地与Hub的权重文件哈希
- 本地找到训练输出目录下的
checkpoint-best文件夹(或对应第7轮的checkpoint文件夹),查看pytorch_model.bin的哈希值:
Linux/macOS用命令:
Windows用命令:md5sum bert-finetuned-ner/checkpoint-best/pytorch_model.bincertutil -hashfile bert-finetuned-ner/checkpoint-best/pytorch_model.bin MD5 - 登录Hugging Face Hub进入你的模型仓库,找到
pytorch_model.bin,查看文件详情里的哈希值,和本地的对比。如果一致,说明推送的是最优模型。
3. 查看训练日志
翻本地训练日志(或Hub仓库里的training_args.bin对应的日志),找Loading best model from的条目,比如:
Loading best model from ./bert-finetuned-ner/checkpoint-xxxx (score: 0.95)
这个路径对应的就是被加载的最优模型,而trainer.push_to_hub()会推送当前trainer.model的权重,也就是这个最优模型。
二、修正模型卡的指标显示
如果确认推送的是最优模型,但模型卡显示最后一轮的指标,可以手动更新:
- 直接在Hub仓库编辑
README.md,把指标部分替换成第7轮的最优F1值; - 或者训练结束后手动生成包含最优指标的模型卡再推送:
# 替换成你的实际最优F1值 trainer.create_model_card(metrics={"eval_f1": 0.95}) trainer.push_to_hub()
内容的提问来源于stack exchange,提问作者Giusè Reichardt
相关产品推荐
相关产品推荐

