Сохраняйте только лучшие веса с трансформаторами huggingface

В настоящее время я создаю новую модель на основе трансформатора с huggingface-transformers, где уровень внимания отличается от исходного. Я использовал run_glue.py, чтобы проверить производительность моей модели на тесте GLUE. Тем не менее, я обнаружил, что класс тренера huggingface-transformers сохраняет все установленные мной контрольные точки, где я могу установить максимальное количество контрольных точек для сохранения. Однако я хочу сохранить только вес (или другие вещи, такие как оптимизаторы) с лучшей производительностью в наборе данных для проверки, а текущий класс Trainer, похоже, не обеспечивает такой вещи. (Если мы установим максимальное количество контрольных точек, тогда будут удалены более старые контрольные точки, а не с худшей производительностью). Кто-то уже задавал тот же вопрос на Github, но я не могу понять, как модифицирую скрипт и делаю что хочу. В настоящее время я подумываю создать собственный класс Trainer, который наследует исходный и изменит метод train(), и было бы здорово, если бы был простой и простой способ сделать это. Заранее спасибо.


person Seewoo Lee    schedule 23.06.2020    source источник


Ответы (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)

Могут быть лучшие способы избежать слишком большого количества контрольных точек и выбрать лучшую модель. Пока вы не можете сохранить только лучшую модель, но вы проверяете, когда оценка дает лучшие результаты, чем предыдущая.

person Shaina Raza    schedule 08.10.2020
comment
Всего один балл, если вы используете load_best_model_at_end = True, чем save_steps и, очевидно, save_total_limit будет проигнорирован - person Diogo Santiago; 20.03.2021

Это должно быть полезно, когда вы сравниваете текущую точность проверки с лучший, а затем сохраните лучшую модель.

person user12769533    schedule 25.06.2020
comment
Избегайте ответов только по ссылкам. - person cronoik; 25.06.2020

Я не видел для этого никаких параметров. Однако есть обходной путь.

Используйте следующие комбинации

    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, чтобы он служил вашей цели

person Karthik Sunil    schedule 20.05.2021