【问题标题】:How can I monitor both training and eval loss when finetuning BERT on a GLUE task?在 GLUE 任务上微调 BERT 时,如何监控训练和评估损失?
【发布时间】:2020-08-16 11:49:33
【问题描述】:

我正在运行 https://github.com/huggingface/transformers/blob/master/examples/run_glue.py 来对二元分类任务 (CoLA) 进行微调。 我想同时监控训练和评估损失,以防止过度拟合。

目前库是 2.8.0,我是从源代码安装的。

当我使用

运行示例时
python run_glue.py --model_name_or_path bert-base-uncased 
                   --task_name CoLA 
                   --do_train 
                   --do_eval
                   --data_dir my_dir 
                   --max_seq_length 128
                   --per_gpu_train_batch_size 8
                   --per_gpu_eval_batch_size 8 
                   --learning_rate 2e-5
                   --num_train_epochs 3.0
                   --output_dir ./outputs
                   --logging_steps 5

在标准输出日志中,我看到带有单个损失值的行,例如

{“学习率”:3.3333333333333333e-06,“损失”:0.47537623047828675, “步骤”:25}

通过查看https://github.com/huggingface/transformers/blob/master/src/transformers/trainer.py,我看到在那里计算了训练和评估损失(在我看来,代码最近被重构了)。

我因此将https://github.com/huggingface/transformers/blob/abb1fa3f374811ea09d0bc3440d820c50735008d/src/transformers/trainer.py#L314替换为

 cr_loss = self._training_step(model, inputs, optimizer)
 tr_loss += cr_loss

并在https://github.com/huggingface/transformers/blob/abb1fa3f374811ea09d0bc3440d820c50735008d/src/transformers/trainer.py#L345行之后添加

logs["training loss"] = cr_loss

我得到了:

0502 14:12:18.644119 23632 summary.py:47] Summary name training loss is illegal; using training_loss instead.  
                          | 4/10  [00:02<00:04,  1.49it/s]  
{"learning_rate":  3.3333333333333333e-06, "loss": 0.47537623047828675, "training loss": 0.5451719760894775, "step": 25}

这样可以吗,还是我在这里做错了什么?

在标准输出中监控两者在微调期间给定记录间隔的平均训练和评估损失的最佳方法是什么?

【问题讨论】:

    标签: python pytorch huggingface-transformers


    【解决方案1】:

    如果安装更新的版本(我通过 pip 尝试了 2.9.0),代码中可能不需要更改:只需使用附加标志 --evaluate_during_training 触发微调,输出就可以了

    0506 12:11:30.021593 34540 trainer.py:551] ***** Running Evaluation ***** 
    I0506 12:11:30.022596 34540 trainer.py:552]   Num examples = 140  
    I0506 12:11:30.023634 34540 trainer.py:553]   Batch size = 8 Evaluation:  
    100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 18/18 [00:19<00:00,  1.10s/it]  
    {"eval_mcc": 0.0, "eval_loss": 0.6600487811697854, "learning_rate": 3.3333333333333333e-06, "loss": 0.50044886469841, "step": 25}
    

    请注意示例脚本更改非常频繁,因此完成此操作的标志可能会更改名称...另请参阅此处https://discuss.huggingface.co/t/how-to-monitor-both-train-and-validation-metrics-at-the-same-step/1301

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 2022-06-30
      • 2018-06-11
      • 1970-01-01
      • 2020-08-06
      • 2018-08-08
      相关资源
      最近更新 更多