Реконструкция тренировочного пути из сохраненного контрольного пункта - PullRequest
0 голосов
/ 17 апреля 2020

Я тренирую простую полностью сверточную сеть с помощью batchnorm. Я сохранил контрольную точку после инициализации. Затем я восстановил его и снова запустил тренировку (с теми же гиперпараметрами). Тем не менее, я получил разные результаты от двух тренировочных процедур. Все мои семена (python, numpy и tf) были установлены равными в начале двух прогонов.

В чем может быть причина несоответствия?

1 Ответ

0 голосов
/ 18 апреля 2020

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

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

Вот некоторый псевдокод очень высокого уровня, который предполагает, что у вас есть функции для сборки, инициализировать и обучить модель. А также функции для сохранения и загрузки контрольных точек.

def set_seeds(seed):
    random.seed(seed)
    np.random.seed(seed)
    tf.random.set_seed(seed)

# Make a checkpoint.
set_seeds(INIT_SEED)
model = build_model()
model = initialize_model(model)
save_checkpoint(model)

# Or load a checkpoint.
model = load_checkpoint()

# At this point seeds need to be identical.
# So re-fix the seeds for training, then proceed.
set_seeds(TRAIN_SEED)
trained = train_model(model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...