拥抱面变压器仅节省最佳重量

时间:2020-06-23 00:53:56

标签: deep-learning nlp pytorch huggingface-transformers

当前,我正在构建一个包含变形人脸的基于变压器的新模型,其中注意层与原始人不同。我使用run_glue.py在GLUE基准测试中检查了模型的性能。但是,我发现拥抱面部变形器的Trainer类保存了我设置的所有检查点,在这里我可以设置要保存的最大检查点数。但是,我只想在验证数据集上保留具有最佳性能的权重(或其他诸如优化器之类的东西),当前的Trainer类似乎没有提供这种功能。 (如果我们设置了最大检查点数,那么它将删除较旧的检查点,而不是性能较差的检查点)。 Someone already asked about same question on Github,但我不知道如何修改脚本并执行所需的操作。当前,我正在考虑制作一个自定义的Trainer类,该类继承原始类并更改train()方法,如果有一种简便的方法可以很好地做到这一点。预先感谢。

3 个答案:

答案 0 :(得分:1)

您可以尝试在培训师的怀抱中尝试以下参数

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)

可能有更好的方法来避免过多的检查点并选择最佳模型。 到目前为止,您不能仅保存最佳模型,而是要检查何时可以产生比上一个更好的结果。

答案 1 :(得分:0)

This在将当前的验证准确性与最佳验证准确性进行比较,然后保存最佳模型时应该会有所帮助。

答案 2 :(得分:0)

我没有看到任何参数。但是,有一个解决方法。

使用以下组合

    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 以达到您的目的