Epoch (эпоха) в обучении моделей — это обычно один полный проход по обучающему набору данных. Но это правило не абсолютно: в актуальных API Keras эпоха может быть и операционной границей, заданной числом шагов через steps_per_epoch, поэтому она не всегда совпадает с полным проходом по данным.
Английский термин: epoch. Также встречается: эпоха обучения, проход по данным. Последний вариант полезен для интуиции, но не всегда точен: Keras FAQ прямо описывает epoch как произвольную отсечку, обычно равную одному полному проходу по тренировочному датасету, и использует её как границу для логирования и периодической оценки.
Простыми словами
Грубо говоря, эпоха — это один «круг» обучения. Если у вас есть набор примеров, модель не смотрит на них все сразу: она проходит их порциями, а когда дошла до конца набора, это обычно и называют одной эпохой.
Можно представить это как подготовку к экзамену по карточкам. Вы пролистали всю колоду один раз — это одна эпоха. Затем перемешали карточки и прошли их ещё раз — вторая эпоха. В исследовательской работе One Pass ImageNet именно так и описывается типичный сценарий глубокого обучения: несколько проходов по датасету с перемешиванием на каждой эпохе.
Как это работает
Во встроенных циклах обучения Keras и TensorFlow данные обычно делятся на небольшие порции — батчи. Затем fit() проходит эти батчи один за другим, обновляя параметры модели, а после завершения эпохи может записать метрики, запустить валидацию и callbacks. В TensorFlow документация отдельно отмечает, что датасет сбрасывается после каждой эпохи.
Датасет
-> batch 1
-> batch 2
-> ...
-> batch N
-> конец epoch
-> логирование метрик
-> validation
-> callbacks / checkpoint
-> следующая epoch
- Фреймворк получает обучающие данные.
- Данные разбиваются на батчи; если вам нужно освежить этот термин, см. Batching (пакетная обработка).
- На каждом батче модель делает шаг обучения.
- После последнего батча эпоха завершается, и Keras может сохранить значения loss и метрик в
History.historyпо эпохам. - В конце эпохи может запускаться validation; в Keras FAQ и руководстве TensorFlow именно граница эпохи используется для периодической оценки.
Важная оговорка: в Keras 3 эпоха считается проходом по x и y целиком только если не задан steps_per_epoch. Если этот параметр указан, эпоха заканчивается после заданного числа шагов. Поэтому формула «1 epoch = весь датасет» верна по умолчанию, но не во всех конфигурациях.
В PyTorch обучающий tutorial использует термин чуть более операционно: epoch — это одна внешняя итерация цикла оптимизации, внутри которой обычно есть train loop и validation/test loop. А словарь scikit-learn дополнительно предупреждает, что в экосистеме в целом термины iteration и epoch применяются не полностью единообразно.
Где применяется
- Управление длительностью обучения. Параметр
epochsвfit()задаёт, сколько таких циклов выполнить. - Логирование метрик. В Keras значения loss и метрик складываются в
History.historyпо эпохам, поэтому графики обучения обычно читают именно в этом разрезе. - Валидация по расписанию. В Keras и TensorFlow validation обычно запускается в конце каждой эпохи, а не после каждого батча.
- Сохранение и возобновление обучения. В Keras FAQ рекомендуется
BackupAndRestore: callback сохраняет номер эпохи и веса и позволяет продолжить обучение с последней завершённой эпохи. Это тесно связано с понятием checkpoint.
Практический пример
Ниже — минимальный сценарий на Keras, где эпоха по умолчанию означает полный проход по x и y:
history = model.fit(
x,
y,
epochs=3,
batch_size=32,
validation_data=(x_val, y_val)
)
print(history.history.keys())
Что здесь важно:
epochs=3просит выполнить три эпохи.- Если
steps_per_epochне задан, Keras трактует эпоху как проход по всемуxиy. - Если передан
validation_data, validation выполняется в конце каждой эпохи. - Метрики сохраняются в
history.historyпо эпохам, а не по каждому отдельному батчу.
Теперь вариант, где эпоха перестаёт быть синонимом «полного прохода по данным»:
model.fit(
dataset,
epochs=3,
steps_per_epoch=100
)
Здесь Keras завершит эпоху после 100 шагов. Если dataset бесконечно повторяется или просто больше этого объёма, одна эпоха будет лишь частью полного прохода. Отдельная тонкость касается валидации: документация Keras отмечает, что если вы потребляете только часть validation-датасета через validation_steps, то в каждой эпохе будут использоваться те же validation-сэмплы из этого частичного диапазона.
Чем отличается от…
| Термин | Что обычно означает | Где возникает путаница |
|---|---|---|
| Epoch | Один цикл обучения; часто полный проход по обучающим данным | В Keras может задаваться через steps_per_epoch; тогда это не обязательно полный проход |
| Batch | Небольшая порция данных, на которой выполняется один шаг обучения | Иногда говорят «модель увидела данные», но фактически она видит их батчами внутри эпохи; см. batching |
| Iteration / step | Один шаг цикла обучения, обычно на одном батче | В некоторых библиотеках и текстах терминология непоследовательна; scikit-learn прямо предупреждает об этом |
| Полный проход по данным | Интуитивное описание эпохи по умолчанию | Полезно для объяснения, но не покрывает случаи с повторяющимся датасетом и steps_per_epoch |
Ограничения и заблуждения
- Заблуждение: одна epoch всегда равна одному полному проходу по датасету. Точнее: это верно по умолчанию для Keras при обучении на конечных
xиy, но перестаёт быть строгим правилом, если заданsteps_per_epochили данные повторяются бесконечно. - Заблуждение: epoch — это полностью стандартизованный термин во всех ML-библиотеках. Точнее: scikit-learn предупреждает, что в экосистеме встречается непоследовательное употребление iteration и epoch.
- Заблуждение: число эпох само по себе говорит, сколько данных модель реально обработала. Точнее: без знания размера батча, числа шагов и типа датасета это не всегда так.
- Ограничение документации: старые страницы Keras 2 или legacy-формулировки в разных стеках могут отличаться от текущего Keras 3 API. Если вы документируете рабочий пайплайн, сверяйтесь именно с той версией и тем backend, которые используете.
Редакционное ограничение: эта статья описывает актуальную на 2026-08-18 трактовку термина по документации Keras, TensorFlow, PyTorch и scikit-learn из предоставленного набора источников. Для других библиотек и нестандартных циклов обучения формулировки могут отличаться.
Практический вердикт: когда вы видите в конфиге или статье «10 epochs», не считайте автоматически, что модель сделала десять полных проходов по датасету. Сначала проверьте steps_per_epoch, тип входных данных, схему валидации и сохранения состояния между эпохами.
Связанные термины и инструменты
Для полного контекста обучения полезно разобрать ещё несколько соседних понятий: Batching объясняет, как данные режутся на пакеты внутри эпохи; Checkpoint — как сохраняется состояние модели на границе эпох; Chunking — как готовят длинные тексты до обучения или индексации; для более широкого словаря дообучения можно также посмотреть DPO.
Источники
- GitHub – keras-team/keras: Deep Learning for humans · GitHub
- Releases · keras-team/keras · GitHub
- GitHub – tensorflow/tensorflow: An Open Source Machine Learning Framework for Everyone · GitHub
- Releases · tensorflow/tensorflow · GitHub
- GitHub – pytorch/pytorch: Tensors and Dynamic neural networks in Python with strong GPU acceleration · GitHub
- Releases · pytorch/pytorch · GitHub
- Keras FAQ
- Model training APIs
- Training & evaluation with the built-in methods | TensorFlow Core
- Optimizing Model Parameters — PyTorch Tutorials
- Glossary of Common Terms and API Elements — scikit-learn
- One Pass ImageNet
Вопросы и ответы
Epoch и iteration — это одно и то же?
Не всегда. В Keras и TensorFlow epoch обычно означает внешний цикл, состоящий из множества шагов по батчам, а step или iteration чаще относится к одному такому шагу. Но scikit-learn отдельно предупреждает, что терминология в экосистеме не полностью единообразна.
Всегда ли одна эпоха равна полному проходу по датасету?
Нет. В Keras это верно по умолчанию для конечных x и y, но при steps_per_epoch эпоха заканчивается после заданного числа шагов. Если датасет повторяется бесконечно, эпоха вообще становится удобной операционной отсечкой, а не естественным концом набора данных.
Когда запускается validation?
В Keras FAQ и руководстве TensorFlow validation выполняется в конце каждой эпохи. Если используется validation_steps и берётся только часть validation-датасета, Keras указывает, что на каждой эпохе будут использоваться те же validation-сэмплы из этой части.
Можно ли продолжить обучение после прерывания?
Да, в Keras для этого рекомендуется BackupAndRestore. По FAQ этот callback сохраняет номер эпохи и веса, чтобы обучение можно было возобновить с последней завершённой эпохи, а не начинать заново.