В настоящее время я создаю новую модель на основе трансформатора с huggingface-transformers, где уровень внимания отличается от исходного. Я использовал run_glue.py
, чтобы проверить производительность моей модели на тесте GLUE. Тем не менее, я обнаружил, что класс тренера huggingface-transformers сохраняет все установленные мной контрольные точки, где я могу установить максимальное количество контрольных точек для сохранения. Однако я хочу сохранить только вес (или другие вещи, такие как оптимизаторы) с лучшей производительностью в наборе данных для проверки, а текущий класс Trainer, похоже, не обеспечивает такой вещи. (Если мы установим максимальное количество контрольных точек, тогда будут удалены более старые контрольные точки, а не с худшей производительностью). Кто-то уже задавал тот же вопрос на Github, но я не могу понять, как модифицирую скрипт и делаю что хочу. В настоящее время я подумываю создать собственный класс Trainer, который наследует исходный и изменит метод train()
, и было бы здорово, если бы был простой и простой способ сделать это. Заранее спасибо.
Сохраняйте только лучшие веса с трансформаторами huggingface
Ответы (3)
Вы можете попробовать следующие параметры из трейнера в huggingface
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)
Могут быть лучшие способы избежать слишком большого количества контрольных точек и выбрать лучшую модель. Пока вы не можете сохранить только лучшую модель, но вы проверяете, когда оценка дает лучшие результаты, чем предыдущая.
load_best_model_at_end = True
, чем save_steps
и, очевидно, save_total_limit
будет проигнорирован
- person Diogo Santiago; 20.03.2021
Это должно быть полезно, когда вы сравниваете текущую точность проверки с лучший, а затем сохраните лучшую модель.
Я не видел для этого никаких параметров. Однако есть обходной путь.
Используйте следующие комбинации
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, чтобы он служил вашей цели