У меня есть тренер, у которого уже есть триггер остановки на основе общего количества эпох:
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
. Что я сделал не так?
Заранее большое спасибо за помощь!