Callbacks: EarlyStopping и checkpoints
Урок про callbacks — хуки, которые вмешиваются в обучение: ранняя остановка и сохранение лучшей модели.
Callback — это объект, который Keras вызывает в определённые моменты обучения (конец эпохи, батча), позволяя автоматизировать реакцию на ход обучения.
Сидеть и вручную следить, когда остановить обучение, — расточительство. Callbacks делают это сами: останавливают при переобучении, сохраняют лучший вариант, понижают learning rate. Это must-have для любого серьёзного обучения.
EarlyStopping
Этот callback следит за val_loss и останавливает обучение, если он перестал улучшаться N эпох подряд (параметр patience). Сэмулируем его логику на Python — код запускается:
val_loss = [0.95, 0.62, 0.45, 0.42, 0.46, 0.52, 0.60]
patience = 2
best = float("inf")
wait = 0
stop_epoch = None
for epoch, v in enumerate(val_loss, 1):
if v < best:
best = v
wait = 0
else:
wait += 1
if wait >= patience:
stop_epoch = epoch
break
print("лучший val_loss:", best)
print("остановились на эпохе:", stop_epoch)Вывод:
лучший val_loss: 0.42 остановились на эпохе: 6
val_loss не улучшался 2 эпохи подряд (после 4-й) — на 6-й обучение остановилось, сэкономив время.
ModelCheckpoint
Этот callback сохраняет модель на диск — например, только лучшую по val_loss. Так даже если потом модель переобучится, у вас останется лучший снимок.
В Keras
Callbacks передают в fit списком (требует TF):
from tensorflow.keras import callbacks
cbs = [
callbacks.EarlyStopping(monitor="val_loss", patience=3,
restore_best_weights=True),
callbacks.ModelCheckpoint("best_model.keras", monitor="val_loss",
save_best_only=True),
]
model.fit(x_train, y_train, epochs=100,
validation_split=0.2, callbacks=cbs)С restore_best_weights=True после остановки веса откатываются к лучшей эпохе — это важно, иначе останутся уже подпорченные.
Полезные callbacks
| Callback | Что делает |
| EarlyStopping | останавливает при отсутствии прогресса |
| ModelCheckpoint | сохраняет лучшую модель |
| ReduceLROnPlateau | снижает learning rate на плато |
| TensorBoard | логирует метрики для визуализации |
Как работает под капотом
Keras держит список callbacks и в конце каждой эпохи вызывает у каждого метод on_epoch_end, передавая текущие метрики. EarlyStopping в этот момент сравнивает val_loss с лучшим, увеличивает счётчик ожидания и, если терпение исчерпано, выставляет флаг остановки цикла обучения. Никакой магии — это обычные хуки в нужных точках.
Частые ошибки
- Маленький patience. patience=0–1 остановит обучение на случайном шуме val_loss раньше времени.
- Забыть restore_best_weights. Без него модель останется в состоянии последней (худшей) эпохи.
- Мониторить не ту метрику. Для loss «лучше = меньше», для accuracy — «больше»; задайте
modeправильно.
Итог
- Callbacks автоматизируют реакцию на ход обучения, вызываясь в ключевые моменты.
- EarlyStopping останавливает обучение, когда
val_lossперестал улучшаться (patience). - ModelCheckpoint сохраняет лучшую модель на диск.
restore_best_weights=Trueвозвращает веса лучшей эпохи после остановки.