Дообучение: размораживание и повторное обучение
base_model.trainable = True, послойное размораживание, дифференциальные скорости обучения
«Дообучение: размораживание и повторное обучение» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Когда выполнять дообучение
После того как извлечение признаков обучит Вашу голову, дообучение позволяет получить дополнительную точность, адаптируя верхнюю часть предварительно обученной базовой модели к Вашим данным. Выполняйте его только после стабилизации головы, иначе большие градиенты от случайно инициализированной головы могут повредить базовую модель.
Разморозка базовой модели
Установите base.trainable = True, чтобы снова разрешить обновление весов. Само по себе это размораживает каждый слой, что обычно слишком агрессивно.
base.trainable = True
print("Trainable layers:", sum(l.trainable for l in base.layers))Заморозка первых N слоёв
Ранние слои содержат универсальные детекторы границ и текстур, которые следует сохранить. Повторно заморозьте первые N слоёв и выполняйте дообучение только более глубоких слоёв, специфичных для задачи.
base.trainable = True
freeze_until = 100 # keep first 100 layers frozen
for layer in base.layers[:freeze_until]:
layer.trainable = False
for layer in base.layers[freeze_until:]:
layer.trainable = TrueПочему нужна очень низкая скорость обучения
Для дообучения нужна очень низкая скорость обучения, например 1e-5. Предварительно обученные веса уже хорошо настроены; нужно лишь слегка скорректировать их. Большая скорость приводит к катастрофическому забыванию, стирая знания ImageNet, ради которых Вы использовали эту модель.
Повторная компиляция после разморозки
После изменения флагов trainable необходимо повторно скомпилировать модель, чтобы Keras заново определил, какие веса будут получать градиенты. На этом этапе задайте низкую скорость обучения.
from tensorflow.keras.optimizers import Adam
model.compile(
optimizer=Adam(learning_rate=1e-5),
loss="categorical_crossentropy",
metrics=["accuracy"]
)Процесс из двух этапов
- Этап 1 (извлечение признаков): базовая модель заморожена, голова обучается со скоростью около 1e-3, пока точность на проверочных данных не перестанет расти.
- Этап 2 (дообучение): верхние слои размораживаются, модель повторно компилируется со скоростью около 1e-5, после чего обучение продолжается.
Такое разделение стабилизирует обучение и защищает предварительно обученные признаки.
Продолжение обучения на втором этапе
Продолжите обучение с места, на котором завершился первый этап, используя initial_epoch, чтобы журналы и расписания оставались непрерывными.
history2 = model.fit(
train_ds,
validation_data=val_ds,
epochs=20,
initial_epoch=10 # phase 1 ended at epoch 10
)Планировщик скорости обучения
Планировщик со временем уменьшает скорость обучения, поэтому по мере сходимости модели обновления становятся меньше. ReduceLROnPlateau автоматически снижает её, когда значение потерь на проверочных данных перестаёт улучшаться.
from tensorflow.keras.callbacks import ReduceLROnPlateau
lr_cb = ReduceLROnPlateau(
monitor="val_loss", factor=0.5,
patience=2, min_lr=1e-7
)
model.fit(train_ds, validation_data=val_ds,
epochs=20, callbacks=[lr_cb])Предостережение о BatchNorm
ResNet и EfficientNet содержат слои BatchNormalization, которые отслеживают текущую статистику. При дообучении часто лучше оставлять слои BN замороженными (или работать в режиме вывода), поскольку обновление их статистики на небольшом наборе данных может снизить точность.
Следите за переобучением
Дообучение добавляет множество обучаемых параметров, поэтому риск переобучения возрастает. Используйте аугментацию данных, прореживание и EarlyStopping по значению потерь на проверочной выборке.
from tensorflow.keras.callbacks import EarlyStopping
stop = EarlyStopping(monitor="val_loss",
patience=4,
restore_best_weights=True)Собираем всё вместе
Надёжный процесс дообучения выглядит так: обучите head, разморозьте верхние слои, заморозьте BN, повторно скомпилируйте модель с шагом обучения 1e-5, а затем обучайте её с планировщиком и ранней остановкой. Всегда сравнивайте точность на проверочной выборке до и после, чтобы убедиться, что дообучение действительно помогло.
Быстрая проверка
Проверьте свои знания о дообучении.
Повторение
Вы научились выполнять дообучение, устанавливая base.trainable=True, повторно замораживая первые N слоёв, повторно компилируя модель с очень малым шагом обучения (1e-5) и выполняя двухэтапный процесс. Планировщик скорости обучения и ранняя остановка обеспечивают стабильность, а к слоям BatchNorm нужно относиться особенно внимательно. Далее: компактные модели для развёртывания на периферийных устройствах.
Часто задаваемые вопросы
Урок «Дообучение: размораживание и повторное обучение» бесплатный?
Да — полный текст урока «Дообучение: размораживание и повторное обучение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Дообучение: размораживание и повторное обучение»?
base_model.trainable = True, послойное размораживание, дифференциальные скорости обучения Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Дообучение: размораживание и повторное обучение»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Концепции и стратегии трансферного обучения
- Использование VGG16 и ResNet50 в качестве базовых моделей
- Дообучение: размораживание и повторное обучение
- MobileNet и EfficientNet для периферийного развертывания