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

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

Yang

Ответы (8)

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

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

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

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

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

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

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, количество эпох для перебора данных . Если Нет, то будет работать вечно. ". С num_epochs = 1 в приведенном выше примере обучение выполняется точно x_train.size / batch_size раз / шагов (в моем случае это было 175000 шагов, так как x_train имел размер 700000 и batch_size было 4).

Шаги обучения, определенные как num_epochs: шагов явно определено больше, чем количество шагов, неявно определенное 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 = 700000 и batch_size = 4), и это точно количество шагов Estimator.train, хотя для параметра steps было установлено значение 200000 Estimator.train (input_fn = train_input, steps = 200000).

Шаги обучения определяются шагами

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 и шагов для Estimator.train, нижняя граница определяет число шагов, которые будут выполняться.

Поскольку принятого ответа еще нет: По умолчанию для всех ваших тренировочных данных используется эпоха. В этом случае у вас есть 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 enter image description here

enter image description here

шагов = 200 / эпох = 10

enter image description here

enter image description here

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

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

Разделите длину x_train на размер пакета с

steps_per_epoch = x_train.shape[0] // batch_size

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

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

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

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

2,000 images / (10 images / step) = 200 steps.

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

Согласно Глоссарию машинного обучения Google, эпоха определяется как

"Полный обучающий проход по всему набору данных, так что каждый пример был просмотрен один раз. Таким образом, эпоха представляет N / batch_size итераций обучения, где N - общее количество примеров."

Если вы обучаете модель для 10 эпох с размером пакета 6, учитывая общее количество 12 образцов, это означает:

  1. модель сможет увидеть весь набор данных за 2 итерации (12/6 = 2), то есть за одну эпоху.

  2. в целом модель будет иметь 2 X 10 = 20 итераций (итераций на эпоху X без эпох)

  3. повторная оценка потерь и параметров модели будет выполняться после каждой итерации!

2022 WebDevInsider