compile, fit, батчи и эпохи
Урок собирает воедино обучение: compile настраивает модель, fit её обучает, а батчи и эпохи задают ритм.
Эпоха — это один полный проход обучающих данных через сеть; батч — небольшая порция примеров, обрабатываемая за один шаг обновления весов.
Данных бывает слишком много, чтобы прогнать их разом. Поэтому их режут на батчи: модель смотрит на батч, делает шаг, берёт следующий. Когда все батчи пройдены — закончилась эпоха. Понимание этих понятий снимает большинство вопросов про fit.
Батчи, эпохи, итерации
Если выборка — 1000 примеров, а batch_size=100, то одна эпоха = 10 итераций (шагов). Посчитаем это на Python — код запускается:
samples = 1000
batch_size = 100
epochs = 5
steps_per_epoch = samples // batch_size
total_steps = steps_per_epoch * epochs
print("шагов в эпохе:", steps_per_epoch)
print("всего обновлений весов:", total_steps)Вывод:
шагов в эпохе: 10 всего обновлений весов: 50
compile: настройка
В compile задают три вещи: оптимизатор, loss и метрики (требует TF):
model.compile(
optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"],
)fit: запуск обучения
history = model.fit(
x_train, y_train,
epochs=10,
batch_size=32,
validation_split=0.1, # 10% на валидацию
)
print(history.history["loss"]) # loss по эпохам
print(history.history["val_loss"]) # loss на валидацииОбъект history хранит, как менялись loss и метрики — по нему потом строят графики обучения.
Размер батча: компромисс
| Батч | Плюсы | Минусы |
| маленький (8–32) | меньше памяти, шумные шаги помогают обобщению | медленнее, шумный loss |
| большой (256+) | стабильнее, быстрее на GPU | много памяти, риск хуже обобщить |
Как работает под капотом
Каждая итерация fit — это: взять батч → forward pass → посчитать loss → backprop (градиенты) → шаг оптимизатора. После каждой эпохи Keras (если задан validation_split) прогоняет валидационные данные без обновления весов и печатает val_loss — так вы видите, не начала ли модель переобучаться.
Частые ошибки
- Путать эпоху и итерацию. Эпоха — весь датасет, итерация — один батч.
- Слишком много эпох. Модель начнёт переобучаться; следите за
val_loss. - Огромный batch_size при малой памяти. Получите ошибку нехватки памяти (OOM), особенно на GPU.
Итог
compileзадаёт оптимизатор, loss и метрики;fitзапускает обучение.- Батч — порция данных за шаг, эпоха — полный проход датасета.
- Шагов в эпохе = размер выборки / batch_size.
historyиval_lossпомогают отслеживать прогресс и переобучение.