Почему мы включаем_top = False при использовании предварительно подготовленных моделей, таких как InceptionResnetV2, в кератах? - PullRequest
0 голосов
/ 06 января 2019

Использование предварительно обученной модели Imagenet для классификации изображений. Я не могу понять include_top = False в аргументах. Я знаю, что он удаляет полностью связанные слои в конце. Также я хотел бы знать, как решить, какую предварительно подготовленную модель использовать для какой задачи классификации изображений?

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Ваш вопрос связан с заочным обучением. В целом модели CNN для классификации изображений можно разделить на 2 части:

  1. Первая часть - это экстрактор функций, эта часть работы состоит в том, чтобы находить элементы в изображении (или кодировать изображение в более низком пространстве объектов) интуитивно, выходные данные этой части должны сообщать, есть ли у вас хвост, глаза, лицо например .. на картинке.
  2. Вторая часть - это классификатор, эта задача состоит в том, чтобы взять закодированное изображение (вывод экстрактора признаков) и классифицировать изображение по требуемым классам, например, если оно видит хвост, кошачьи глаза и кошачье лицо, оно может сказать его кот.

Когда вы переводите обучение, вы хотите взять обученного экстрактора возможностей, потому что его работа состоит в том, чтобы находить функции, которые большую часть времени будут находиться в вашей задаче классификации (это предложение приходит с большим предположением, что вход в вашу задачу несколько аналогично вводу, на котором был обучен экстрактор функций). Когда вы переводите обучение, вам необходимо переобучить классификатор, потому что теперь он должен классифицировать разные классы и обучать только классификатор на ваших данных.

В моделях CNN функция извлечения объектов в большинстве случаев представляет собой слои свертки, а полностью подключенные - это классификатор, так или иначе, это относится к моделям ImageNet. Вот почему при удаленном обучении они удаляют полностью соединенные слои и переобучают их.

Что касается вашего второго вопроса, большую часть времени вы должны выбирать лучшую из доступных моделей (в зависимости от вашей производительности / ограничений памяти), потому что он, вероятно, обладает самым сильным экстрактором функций.

Подробнее о трансферном обучении (просто Google): FTP: //ftp.cs.wisc.edu/machine-learning/shavlik-group/torrey.handbook09.pdf

0 голосов
/ 06 января 2019

Я не могу понять, что include_top = False в

Если заглянуть в код, это простое условие if-else:

if include_top:
    # Classification block
    x = layers.Flatten(name='flatten')(x)
    x = layers.Dense(4096, activation='relu', name='fc1')(x)
    x = layers.Dense(4096, activation='relu', name='fc2')(x)
    x = layers.Dense(classes, activation='softmax', name='predictions')(x)
else:
    if pooling == 'avg':
        x = layers.GlobalAveragePooling2D()(x)
    elif pooling == 'max':
        x = layers.GlobalMaxPooling2D()(x)

Если вы установите include_top=True, он повторно инициализирует плотный слой с предварительно подготовленным весом, в противном случае он игнорирует его. Если вы установите include_top=False, вывод предыдущего слоя будет проходить через GlobalAvreagePooling2D(), который извлекает наиболее важные функции.

Я хотел бы знать, как решить, какую предварительно подготовленную модель использовать для какой тип задачи классификации изображений?

У каждой модели есть свои плюсы и минусы. Количество параметров, время обучения, время вывода, точность и некоторые другие вещи - это то, что заставило исследователя отдать предпочтение одной модели над другой. Не существует модели, которая выделялась бы в каждой задаче или наборе данных [см. Бесплатный запуск теорема] .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...