Chainer: пользовательское расширение для ранней остановки на основе ограничения по времени - PullRequest
1 голос
/ 23 апреля 2020

У меня есть тренер, у которого уже есть триггер остановки на основе общего количества эпох:

trainer = training.Trainer(updater, (epochs, 'epoch'))

Теперь я хотел бы добавить условие остановки на основе общего истекшего времени, начиная с некоторой точки в код (который может отличаться от времени elapsed_time, хранящегося внутри trainer):

global_start = time.time()
# Some long preprocessing
expensive_processing()
# Trainer starts here and its internal elapsed time
# does not take into account the preprocessing
trainer.run()

Я пытался определить расширение следующим образом.

trainer.global_start = global_start
trainer.global_elapsed_time = 0.0

def stop_training():
    return True

def check_time_limit(my_trainer):
    my_trainer.global_elapsed_time = time.time() - my_trainer.global_start
    # If reach the time limit, then set the stop_trigger as a callable
    # that is always True
    if my_trainer.global_elapsed_time > args.time_limit * 3600:
        my_trainer.stop_trigger = stop_training

# Add the extension to trainer
trainer.extend(check_time_limit, trigger=(1000, 'iteration'))

Запуск кода, Я получил ошибку The previous value of epoch_detail is not saved. Что я сделал не так?

Заранее большое спасибо за помощь!

...