Почему мои ранние эпохи занимают больше времени, чем последующие? - PullRequest
0 голосов
/ 17 апреля 2019

Я тренирую модель в keras и экспериментирую с тем, как объем данных, которые я передаю, влияет на мою результирующую точность. Я заметил кое-что интересное.

training samples: 5076
epoch 1: 142s
epoch 2: 60s
epoch 3: 61s
epoch 4: 60s
epoch 5: 61s

training samples: 10242
epoch 1: 277s
epoch 2: 131s
epoch 3: 131s
epoch 4: 132s
epoch 5: 131s

training samples: 15678
epoch 1: 385s
epoch 2: 323s
epoch 3: 167s
epoch 4: 168s
epoch 5: 168s

training samples: 20691
epoch 1: 577s
epoch 2: 440s
epoch 3: 273s
epoch 4: 274s
epoch 5: 274s

Моя интуиция заключается в том, что каждая эпоха должна занимать примерно одинаковое количество времени.

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

Почему ранние эпохи занимают больше времени? Обновляются ли еще веса в этих ранних прогонах?

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

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

Насчет второй эпохи, это немного сложно. Я предполагаю, что это может быть связано с тем, как ваш оптимизатор обновляет градиенты. например, я видел, как люди упоминали, что увеличение значения beta_1 с 0.9 до 0.99 для оптимизатора adam иногда уменьшает длительность эпохи.

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

1 голос
/ 18 апреля 2019

Самая простая и наиболее интуитивная причина, которую я мог придумать для ранних эпох, которые берут больше, чем последние, заключается в том, что для ваших ранних эпох ошибка вашей системы классификации / регрессии в начале очень высока (что естественно при случайном веса), таким образом, есть много градиентов для обратного распространения и много весов для обновления.

Возможно, ваша модель слишком быстро подбирает тренировочные данные (примерно через 2 эпохи), что последние эпохи обновляют только меньший процент веса, поскольку большинство градиентов теперь равно 0. Это может привести к меньшее время обучения за эпоху.

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

...