Обучение Keras непрерывно против одиночных итераций - PullRequest
0 голосов
/ 26 апреля 2018

Есть ли разница между тренировочными моделями Keras один раз для 64 эпох по 64 раза за одну эпоху.
Как работают градиенты в этом случае? Как они хранят историю операций предварительного просмотра, чтобы настроить импульс?

1)

model.fit(X, y, batch_size=64, epochs=64, verbose=False)

2)

for i in range(64):
    verbose = (i % 16) == 0
    if verbose:
       print(i, end='')
    model.fit(X, y, batch_size=64, epochs=1, verbose=verbose)

1 Ответ

0 голосов
/ 28 апреля 2018

Между этими двумя значениями нет существенной разницы, потому что Model.fit() выполняет метод _fit_loop для количества эпох (исходный код keras/engine/training.py), так что это похоже на разницу между ...

for i in range(64):
  j += 1

... и ...

 for i in range(64):
   for k in range(1):
     j += 1

Но, тем не менее, они не в точности эквивалентны из-за того, что делает Керас помимо самой тренировки:

  • История обучения теряется при втором подходе (model.history). Вы должны поддерживать его вручную, если хотите проверить кривую обучения (часто это происходит).
  • Оба X и y стандартизированы перед циклом (см. Метод Model._standardize_user_data). В некоторых случаях издержки стандартизации могут быть сопоставимы с обучением одной эпохи, и в этом случае вы можете замедлить процесс.
  • Второй подход, однако, позволяет изменять параметры для каждой эпохи, такие как размер партии или перемешивание. Не уверен, что это большое дело.

Кстати, если вы просто хотите напечатать что-то до или после каждой эпохи, используйте keras callbacks , например. on_train_end() метод обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...