Я запускаю 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 и усредненные потери при обучении и оценке для заданного интервала регистрации во время тонкой настройки?