Как я могу следить за тренировками и потерями в работе при настройке BERT для задачи GLUE? - PullRequest
2 голосов
/ 02 мая 2020

Я запускаю 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

В журналах stdout я вижу строки с одним единственным значением для потери, например

{"learning_rate": 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}

Это нормально, или я здесь что-то не так делаю?

Каков наилучший способ контролировать в stdout и усредненные потери при обучении и оценке для заданного интервала регистрации во время тонкой настройки?

1 Ответ

0 голосов
/ 06 мая 2020

Никаких изменений в коде не требуется, если вы устанавливаете самую последнюю версию (я пробовал 2.9.0 через pip): просто включите предварительную настройку с дополнительным флагом --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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...