В большинстве моделей есть параметр steps, указывающий количество шагов для обработки данных . Но все же я вижу, что в большинстве случаев практического использования мы также выполняем функцию соответствия N epochs .
В чем разница между выполнением 1000 шагов с 1 эпохой и 100 шагов с 10 эпохами? Какой из них лучше на практике? Есть ли логические изменения между последовательными эпохами? Перетасовка данных?
Ответы:
Эпоха обычно означает одну итерацию по всем обучающим данным. Например, если у вас 20000 изображений и размер пакета 100, то эпоха должна содержать 20000/100 = 200 шагов. Однако я обычно просто устанавливаю фиксированное количество шагов, например 1000 на эпоху, хотя у меня гораздо больший набор данных. В конце эпохи я проверяю среднюю стоимость, и если она улучшилась, я сохраняю контрольную точку. Нет разницы между шагами от одной эпохи к другой. Я просто отношусь к ним как к контрольно-пропускным пунктам.
Люди часто перемещают набор данных между эпохами. Я предпочитаю использовать функцию random.sample, чтобы выбрать данные для обработки в мои эпохи. Скажем, я хочу выполнить 1000 шагов с размером пакета 32. Я просто случайным образом выберу 32 000 выборок из пула обучающих данных.
источник
Шаг обучения - это одно обновление градиента. За один шаг batch_size обрабатывается множество примеров.
Эпоха состоит из одного полного цикла обучающих данных. Обычно это много шагов. Например, если у вас 2000 изображений и вы используете размер пакета 10, эпоха состоит из 2000 изображений / (10 изображений / шаг) = 200 шагов.
Если вы выбираете наш обучающий образ случайным образом (и независимо) на каждом шаге, вы обычно не называете это эпохой. [Здесь мой ответ отличается от предыдущего. Также см. Мой комментарий.]
источник
Поскольку в настоящее время я экспериментирую с API tf.estimator, я также хотел бы добавить сюда свои интересные результаты. Я еще не знаю, согласовано ли использование параметров шагов и эпох во всем TensorFlow, поэтому пока я просто говорю о tf.estimator (в частности, tf.estimator.LinearRegressor).
Шаги обучения определены
num_epochs
:steps
не определены явноКомментарий: я установил
num_epochs=1
обучающий ввод, и запись в документе дляnumpy_input_fn
сообщает мне «num_epochs: Integer, количество эпох для перебора данных. ЕслиNone
будет работать вечно». , Вnum_epochs=1
приведенном выше примере обучение выполняется точно x_train.size / batch_size раз / шагов (в моем случае это было 175000 шагов, так какx_train
было размером 700000 иbatch_size
было 4).Шаги обучения определяются
num_epochs
:steps
явно определено больше, чем количество шагов, неявно определенноеnum_epochs=1
Комментарий:
num_epochs=1
в моем случае это будет означать 175000 шагов ( x_train.size / batch_size с x_train.size = 700000 и batch_size = 4 ), и это именно то количество шагов,estimator.train
хотя для параметра steps было установлено значение 200000estimator.train(input_fn=train_input, steps=200000)
.Шаги обучения, определенные
steps
Комментарий: Хотя я и поставил
num_epochs=1
при вызовеnumpy_input_fn
обучение останавливается после 1000 шагов. Это потому, чтоsteps=1000
inestimator.train(input_fn=train_input, steps=1000)
перезаписывает файлnum_epochs=1
intf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
.Вывод : Какие бы ни были параметры
num_epochs
дляtf.estimator.inputs.numpy_input_fn
иsteps
дляestimator.train
определения, нижняя граница определяет количество шагов , которые будут пробегают.источник
Проще говоря,
Эпоха: Эпоха считается числом одного прохода от всего набора данных.
Шаги: В тензорном потоке один шаг рассматривается как количество эпох, умноженное на примеры, деленное на размер пакета.
источник
Эпоха: Эпоха обучения представляет собой полное использование всех обучающих данных для расчета и оптимизации градиентов (обучение модели).
Шаг: этап обучения означает использование одного размера пакета обучающих данных для обучения модели.
Количество шагов обучения за эпоху:
total_number_of_training_examples
/batch_size
.Общее количество шагов обучения:
number_of_epochs
xNumber of training steps per epoch
.источник
Поскольку пока нет принятого ответа: по умолчанию для всех ваших тренировочных данных выполняется эпоха. В этом случае у вас есть n шагов, где n = Training_lenght / batch_size.
Если ваши тренировочные данные слишком велики, вы можете ограничить количество шагов в течение эпохи. [ Https://www.tensorflow.org/tutorials/structured_data/time_series?_sm_byp=iVVF1rD6n2Q68VSN]
Когда количество шагов достигнет установленного вами предела, процесс начнется заново, начиная со следующей эпохи. При работе в TF ваши данные обычно сначала преобразуются в список пакетов, которые будут загружены в модель для обучения. На каждом этапе вы обрабатываете одну партию.
Что касается того, что лучше: 1000 шагов для 1 эпохи или 100 шагов для 10 эпох, я не знаю, есть ли прямой ответ. Но вот результаты обучения CNN с использованием обоих подходов с использованием руководств по данным таймсерий TensorFlow:
В этом случае оба подхода приводят к очень похожему прогнозу, различаются только профили обучения.
шагов = 20 / эпох = 100
шагов = 200 / эпох = 10
источник