как сделать тонкую настройку с моделью resnet50?

Я видел много примеров в Интернете о том, как точно настроить VGG16 и InceptionV3. Например, некоторые люди устанавливают замораживание первых 25 слоев при тонкой настройке VGG16. Для InceptionV3 первые 172 слоя будут заморожены. А как насчет реснета? Когда мы делаем точную настройку, мы замораживаем некоторые слои базовой модели, как показано ниже:

from keras.applications.resnet50 import ResNet50

base_model = ResNet50(include_top=False, weights="imagenet", input_shape=(input_dim, input_dim, channels))

..............

for layer in base_model.layers[:frozen_layers]:
    layer.trainable = False

Итак, как мне установить frozen_layers? На самом деле я не знаю, сколько слоев мне следует установить для замораживания, когда я выполняю тонкую настройку с помощью VGG16, VGG19, ResNet50, InceptionV3 и т. Д. Может ли кто-нибудь дать мне рекомендации по настройке этих моделей? Особенно, сколько слоев люди заморозят, когда будут выполнять точную настройку с этими моделями?


person Abraham Ben    schedule 11.10.2017    source источник
comment
Я также слышал, что если мы тренируем только наши собственные плотные слои, это называется трансферным обучением. И если мы обучаем некоторые слои в base_model (например, resnet, vgg .etc) с небольшой скоростью обучения, это называется тонкой настройкой. Я знаю, что сверточные блоки имеют особое значение, так как же заморозить слои в базовой модели, чтобы выполнить точную настройку?   -  person Abraham Ben    schedule 12.10.2017
comment


Ответы (1)


Это любопытно .... у модели VGG16 всего 23 слоя ... (https://github.com/fchollet/keras/blob/master/keras/applications/vgg16.py)


У всех этих моделей схожая структура:

  • Серия сверточных слоев
  • Далее следует несколько плотных слоев

Эти несколько плотных слоев и есть то, что keras называет top. (Как в параметре include_top).

Обычно такая тонкая настройка происходит только в последних плотных слоях. Вы позволяете сверточным слоям (которые понимают изображения и обнаруживают объекты) выполнять свою работу без изменений и создавать свою верхнюю часть, адаптированную к вашим личным занятиям.

Люди часто создают свои собственные верхние части, потому что у них нет точно тех классов, которым была обучена исходная модель. Поэтому они адаптируют финальную часть и тренируют только финальную часть.

Итак, вы создаете модель с include_top=False, а затем полностью замораживаете ее.
Теперь вы добавляете свои собственные плотные слои и оставляете их обучаемыми.

Это самая обычная доработка этих моделей.

Для других видов тонкой настройки, вероятно, нет четких правил.

person Daniel Möller    schedule 11.10.2017
comment
Извините за ошибку vgg. Я имею в виду, что люди будут замораживать сеть vgg, за исключением последнего сверточного блока, чтобы быть более адаптированными к своим собственным данным, а затем настраивать последний сверточный блок, а также плотные слои с небольшой скоростью обучения, например: точная настройка vgg16 - person Abraham Ben; 12.10.2017