Я совсем запутался со значением эпох и шагов. Я тоже читал вопрос В чем разница между шагами и эпохами в TensorFlow?, но не уверен в ответе. Рассмотрим эту часть кода:
EVAL_EVERY_N_STEPS = 100
MAX_STEPS = 10000
nn = tf.estimator.Estimator(
model_fn=model_fn,
model_dir=args.model_path,
params = {"learning_rate": 0.001},
config=tf.estimator.RunConfig())
for _ in range(MAX_STEPS // EVAL_EVERY_N_STEPS):
print(_)
nn.train(input_fn=train_input_fn,
hooks=[train_qinit_hook, step_cnt_hook],
steps=EVAL_EVERY_N_STEPS)
if args.run_validation:
results_val = nn.evaluate(input_fn=val_input_fn,
hooks=[val_qinit_hook,
val_summary_hook],
steps=EVAL_STEPS)
print('Step = {}; val loss = {:.5f};'.format(
results_val['global_step'],
results_val['loss']))
end
Кроме того, количество обучающих выборок равно 400. Я считаю MAX_STEPS//EVAL_EVERY_N_STEPS равными эпохам (или итерациям). Действительно, количество эпох равно 100. Что означают шаги в nn.train?
Фактически этот код является частью инструментария DLTK. for _ in range(MAX_STEPS // EVAL_EVERY_N_STEPS): я думаю, что указывает количество эпох.
В глубоком обучении:
Если ваш набор данных не разделен и передан вашему алгоритму как есть, каждый шаг соответствует одной эпохе, но обычно обучающий набор делится на N мини-пакетов. Затем каждый шаг проходит через одну партию, и вам нужно N шагов, чтобы завершить целую эпоху.
Здесь, если batch_size == 4
, то 100 шагов действительно равны одной эпохе.
epochs = batch_size * steps // n_training_samples
Большое спасибо, Оливье. Это проясняло.
Вам не нужен цикл for с оценщиком. Он обрабатывает итерацию так же, как Keras. И, пожалуйста, внимательно прочитайте руководства по TensorFlow.