Для обеспечения качественного подбора внутренних параметров глубокие нейросети требуют неоднократного прохода по обучающим данным. Каждая итерация в рамках этого процесса называется эпохой. В этой статье я расскажу о том, как этот процесс реализован в TensorFlow 2, о плюсах и минусах разных подходов.
Так простым и быстрым способом является использование метода repeat. Он повторяет данные заданное либо неограниченное количество раз. Соответственно, один проход по таким данным соответствует нескольким ручным переборам.
В демонстрационных целях скачаем набор данных о пассажирах трагического рейса на Титанике и загрузим в родной формат хранения данных в TensorFlow 2 - Dataset (подробнее рассказывал здесь). Для этого воспользуемся методом tf.data.TextLineDataset для чтения списка строк из одного или нескольких текстовых файлов:
На рисунке отображены первые 4 строки, одна из которых является заглавной. Мы можем выбрать эти строки и повторять заданное число раз с помощью метода repeat(количество повторений):
Теперь выберем 14 строк повторим их дважды и разобьем на пакеты по 3 в каждом (подробнее писал здесь). Затем визуализируем размеры каждого пакета:
На графике видно, что мы фактически потеряли информацию о границе между эпохами. Если поменять местами вызовы методов batch и repeat, то можно увидеть разделение:
Вызов метода repeat является простым способом задания эпох, но при этом мы жертвуем управляемостью процесса между эпохами. Если это недопустимо, рекомендуется задавать прогоны "вручную":