Подтвердить что ты не робот

В чем разница между шагами и эпохами в TensorFlow?

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

В чем разница между запуском 1000 шагов с 1 эпохой и запуском 100 шагов с 10 эпохой? Какой из них лучше на практике? Любая логика меняется между последовательными эпохами? Перетасовка данных?

4b9b3361

Ответ 1

Эпоха обычно означает одну итерацию по всем данным обучения. Например, если у вас есть 20 000 изображений и размер партии 100, тогда эпоха должна содержать 20 000/100 = 200 шагов. Однако я обычно устанавливаю фиксированное число шагов, например, 1000 за эпоху, хотя у меня есть гораздо больший набор данных. В конце эпохи я проверяю среднюю стоимость, и если она улучшилась, я сохраняю контрольную точку. Между шагами от одной эпохи к другой нет разницы. Я просто рассматриваю их как контрольно-пропускные пункты.

Люди часто перемешивают набор данных между эпохами. Я предпочитаю использовать функцию random.sample для выбора данных для обработки в мои эпохи. Так что скажите, что я хочу сделать 1000 шагов с размером партии 32. Я просто случайно выберу 32 000 выборок из пула данных обучения.

Ответ 2

Шаг обучения - это одно обновление градиента. За один шаг batch_size обрабатывается много примеров.

Эпоха состоит из одного полного цикла через данные обучения. Обычно это много шагов. Например, если у вас есть 2000 изображений и размер партии составляет 10, эпоха состоит из 2000 изображений /(10 изображений/шагов) = 200 шагов.

Если вы выбираете наш обучающий образ случайным образом (и независимым) на каждом шаге, вы обычно не называете его эпохой. [Здесь мой ответ отличается от предыдущего. Также см. Мой комментарий.]

Ответ 3

Поскольку в настоящее время я экспериментирую с API tf.estimator, я хотел бы также добавить сюда свои выводы. Я пока не знаю, является ли использование параметров steps и epochs единым для всего TensorFlow, и поэтому я сейчас просто касаюсь tf.estimator (в частности, tf.estimator.LinearRegressor).

Шаги обучения, определенные в num_epochs: steps не определены явно

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input)

Комментарий: я установил 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

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=200000)

Комментарий: num_epochs=1 в моем случае означало бы 175000 шагов (x_train.size/batch_size с x_train.size = 700 000 и batch_size = 4), и это точно количество шагов estimator.train, хотя для параметра steps было задано значение 200 000 estimator.train(input_fn=train_input, steps=200000).

Шаги обучения, определенные в steps

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=1000)

Комментарий: хотя я и установил num_epochs=1 при вызове numpy_input_fn, тренировка останавливается после 1000 шагов. Это потому, что steps=1000 в estimator.train(input_fn=train_input, steps=1000) перезаписывает num_epochs=1 в tf.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, нижняя граница определяет количество шагов, которые будут выполнены.

Ответ 4

Простыми словами
Эпоха: Эпоха считается числом одного прохода из всего набора данных.
Шаги: В тензорном потоке один шаг рассматривается как количество эпох, умноженное на примеры, деленное на размер партии.

steps = (epoch * examples)/batch size
For instance
epoch = 100, examples = 1000 and batch_size = 1000
steps = 100

Ответ 5

Эпоха: Эпоха обучения представляет собой полное использование всех данных обучения для расчета и оптимизации градиентов (обучаем модель).

Шаг. Шаг обучения - это обучение с использованием пакета данных обучения за один раз.

Количество обучающих шагов за эпоху: total_number_of_training_examples/batch_size

Общее количество тренировочных шагов: количество эпох x Количество тренировочных шагов за эпоху

Почему люди иногда указывают только количество этапов обучения без указания количества периодов обучения: Люди хотят многократно произвольно извлекать данные "размера партии" из данных обучения для обучения вместо того, чтобы последовательно проходить все данные обучения. Поэтому люди просто устанавливают количество тренировочных шагов.