Использование VGG16 и ResNet50 в качестве базовых моделей
keras.applications.VGG16(weights='imagenet', include_top=False), добавление пользовательской верхушки
«Использование VGG16 и ResNet50 в качестве базовых моделей» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Модуль приложений Keras
tf.keras.applications предоставляет десятки предварительно обученных архитектур, которые можно загрузить одной строкой. Два классических варианта — VGG16 (простая глубокая последовательность свёрток 3x3) и ResNet50 (остаточные соединения, более глубокая и точная модель).
Загрузка VGG16 в качестве базовой модели
Загрузите VGG16 с весами ImageNet, но без классификационной головы, чтобы подключить собственную.
from tensorflow.keras.applications import VGG16
base = VGG16(
weights="imagenet", # download pretrained weights
include_top=False, # drop the 1000-class classifier
input_shape=(224, 224, 3) # standard ImageNet input size
)Разбор аргументов
weights="imagenet": загрузить предварительно обученные веса вместо случайных.include_top=False: удалить исходный плотный классификатор, чтобы добавить собственный.input_shape=(224,224,3): высота, ширина и 3 канала RGB.
Именно параметр include_top=False делает модель пригодной для повторного использования в новой задаче.
Заморозка базовой модели
Установите base.trainable = False, чтобы предварительно обученные свёрточные веса оставались неизменными на первом этапе обучения. Обучаться будет только Ваша новая голова.
base.trainable = False
print(len(base.trainable_weights)) # -> 0 when frozenGlobalAveragePooling2D
Базовая модель выдаёт карту признаков размерности 3D, например (7, 7, 512). GlobalAveragePooling2D усредняет каждый канал по его пространственной сетке, преобразуя его в один вектор на канал — в данном случае длиной 512.
Этот слой заменяет огромную связку Flatten + Dense, значительно сокращая количество параметров и уменьшая риск переобучения.
from tensorflow.keras.layers import GlobalAveragePooling2D
# (batch, 7, 7, 512) -> (batch, 512)
pooled = GlobalAveragePooling2D()(base.output)Добавление выходной головы Dense
Подключите слой Dense, размер которого соответствует количеству Ваших классов. Используйте softmax для многоклассовой классификации или sigmoid для бинарной.
from tensorflow.keras import layers, Model
x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.3)(x)
outputs = layers.Dense(10, activation="softmax")(x)
model = Model(inputs=base.input, outputs=outputs)Переход к ResNet50
ResNet50 использует тот же интерфейс. Её остаточные (пропускающие) соединения позволяют обучать гораздо более глубокую сеть без исчезающих градиентов, поэтому при сходной скорости она обычно обеспечивает более высокую точность на ImageNet, чем VGG16.
from tensorflow.keras.applications import ResNet50
base = ResNet50(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)
base.trainable = FalseVGG16 и ResNet50
- VGG16: около 138 млн параметров, простая однородная последовательность слоёв 3x3, требует много памяти, легко理解ть.
- ResNet50: около 25 млн параметров, остаточные блоки, более глубокая, обычно точнее и легче.
Для большинства современных задач переноса обучения ResNet50 является более удачным вариантом по умолчанию.
Согласование предварительной обработки
У каждого семейства есть собственная функция preprocess_input. VGG16 вычитает средние значения RGB, а ResNet50 использует похожее масштабирование в стиле Caffe. Всегда импортируйте функцию, соответствующую Вашей базовой модели.
from tensorflow.keras.applications.resnet50 import preprocess_input
x = preprocess_input(image_batch) # required for correct resultsКомпиляция модели
Когда базовая модель заморожена, скомпилируйте модель и обучите голову с обычными настройками оптимизатора.
model.compile(
optimizer="adam",
loss="categorical_crossentropy",
metrics=["accuracy"]
)
model.fit(train_ds, validation_data=val_ds, epochs=10)Проверка архитектуры
Вызовите model.summary(), чтобы убедиться, что базовая модель заморожена (количество необучаемых параметров велико), а обучается только голова. Такая проверка помогает на раннем этапе обнаружить ошибки настройки.
model.summary()
# Look at "Trainable params" vs "Non-trainable params"Быстрая проверка
Проверьте, насколько Вы умеете создавать модель с переносом обучения в Keras.
Повторение
Вы загрузили VGG16 и ResNet50 с параметрами weights="imagenet", include_top=False и input_shape=(224,224,3), заморозили базовую модель с помощью base.trainable=False, объединили признаки с помощью GlobalAveragePooling2D и добавили выходную голову Dense.
ResNet50 является более удачным вариантом по умолчанию. Далее: разморозка слоёв для дообучения.
Часто задаваемые вопросы
Урок «Использование VGG16 и ResNet50 в качестве базовых моделей» бесплатный?
Да — полный текст урока «Использование VGG16 и ResNet50 в качестве базовых моделей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Использование VGG16 и ResNet50 в качестве базовых моделей»?
keras.applications.VGG16(weights='imagenet', include_top=False), добавление пользовательской верхушки Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Использование VGG16 и ResNet50 в качестве базовых моделей»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Концепции и стратегии трансферного обучения
- Использование VGG16 и ResNet50 в качестве базовых моделей
- Дообучение: размораживание и повторное обучение
- MobileNet и EfficientNet для периферийного развертывания