Ответ
Перенос знаний (Transfer Learning) — это мощный метод, особенно когда данных для новой задачи мало. Вот основные подходы:
1. Использование предобученной модели как фичейного экстрактора:
from tensorflow.keras.applications import ResNet50
from tensorflow.keras import layers, models
# Загружаем модель, обученную на ImageNet, без верхних полносвязных слоев
base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
# Замораживаем все слои базовой модели
base_model.trainable = False
# Сверху добавляем свои слои для новой задачи
x = layers.GlobalAveragePooling2D()(base_model.output)
x = layers.Dense(256, activation='relu')(x)
output = layers.Dense(10, activation='softmax')(x) # 10 новых классов
model = models.Model(inputs=base_model.input, outputs=output)
model.compile(optimizer='adam', loss='categorical_crossentropy')
# Теперь обучаем только новые, добавленные слои
model.fit(new_dataset, ...)
2. Тонкая настройка (Fine-Tuning): После начального обучения на новых данных, можно разморозить часть слоев предобученной модели для совместного дообучения.
# Размораживаем последние 10 слоев ResNet50
base_model.trainable = True
for layer in base_model.layers[:-10]:
layer.trainable = False
# Важно: используем очень маленькую скорость обучения для тонкой настройки
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-5), ...)
model.fit(new_dataset, ...)
3. Перенос для табличных данных (например, в ансамблях):
- В библиотеках типа XGBoost или LightGBM можно использовать параметр
init_modelилиmodel_pathдля инициализации новой модели весами старой, что ускоряет обучение. - Можно извлечь важность признаков (
feature_importances_) из обученной модели и использовать её для отбора признаков или взвешивания потерь в новой задаче.
Ключевые соображения:
- Совместимость данных: Предобученная модель ожидает определенного распределения входных данных (например, нормализацию ImageNet). Нужно применять идентичную предобработку.
- Схожесть задач: Перенос наиболее эффективен, когда исходная и целевая задачи семантически близки (например, распознавание разных типов транспортных средств).