Deep learning 使用huggingface transformers仅保存最佳权重
目前,我正在使用huggingface transformers构建一个新的基于transformer的模型,其中的注意层与原来的不同。我使用Deep learning 使用huggingface transformers仅保存最佳权重,deep-learning,nlp,pytorch,huggingface-transformers,Deep Learning,Nlp,Pytorch,Huggingface Transformers,目前,我正在使用huggingface transformers构建一个新的基于transformer的模型,其中的注意层与原来的不同。我使用run_glue.py在glue基准上检查我的模型的性能。然而,我发现huggingface transformers的培训师课程保存了我设置的所有检查点,我可以设置要保存的最大检查点数。然而,我只想在验证数据集上以最佳性能保存权重(或其他类似优化器的东西),而当前的培训师课程似乎没有提供这样的功能。(如果我们设置了检查点的最大数量,那么它将删除较旧的检查
run_glue.py
在glue基准上检查我的模型的性能。然而,我发现huggingface transformers的培训师课程保存了我设置的所有检查点,我可以设置要保存的最大检查点数。然而,我只想在验证数据集上以最佳性能保存权重(或其他类似优化器的东西),而当前的培训师课程似乎没有提供这样的功能。(如果我们设置了检查点的最大数量,那么它将删除较旧的检查点,而不是性能较差的检查点),但是我不知道如何修改脚本并做我想做的事情。目前,我正在考虑创建一个自定义的Trainer类,继承原来的类并更改train()
方法,如果有一种简单易行的方法来实现这一点,那就太好了。提前感谢。如果您将当前验证精度与最佳验证精度进行比较,然后保存最佳模型,应该会有所帮助。您可以从培训师的怀抱中尝试以下参数
training_args = TrainingArguments(
output_dir='/content/drive/results', # output directory
do_predict= True,
num_train_epochs=3, # total number of training epochs
**per_device_train_batch_size=4, # batch size per device during training
per_device_eval_batch_size=2**, # batch size for evaluation
warmup_steps=1000, # number of warmup steps for learning rate
save_steps=1000,
save_total_limit=10,
load_best_model_at_end= True,
weight_decay=0.01, # strength of weight decay
logging_dir='./logs', # directory for storing logs
logging_steps=0, evaluate_during_training=True)
可能有更好的方法来避免过多的检查点并选择最佳模型。
到目前为止,您无法仅保存最佳模型,但您可以检查评估何时产生比前一个更好的结果。我还没有看到任何相关参数。然而,有一个解决办法 使用以下组合
evaluation_strategy =‘steps’,
eval_steps = 10, # Evaluation and Save happens every 10 steps
save_total_limit = 5, # Only last 5 models are saved. Older ones are deleted.
load_best_model_at_end=True,
当我尝试使用上述组合时,在任何时候,5个以前的模型都会保存在输出目录中,但如果最好的模型不是其中之一,它也会保留最好的模型。因此将是1+5型号。您可以更改save_total_limit=1,这样就可以达到您的目的请避免。如果您使用
load_best_model\u at_end=True
,则只需一点,而不是save_steps
,显然,save_total_limit
将被忽略