Сколько функций VGG16 должен извлечь при использовании в качестве предварительно обученного экстрактора функций? - PullRequest
0 голосов
/ 03 июля 2019

Я использую Keras с бэкэндом TensorFlow для извлечения функций из изображений с предварительно обученной моделью (VGG16 в ImageNet).Из того, что я могу читать онлайн, я должен получить для каждого изображения вектор с 4096 объектами.

Я использую эту строку для импорта модели без последнего полностью подключенного слоя (как я полагаю, я должен):

applications.vgg16.VGG16(weights='imagenet', include_top=False, pooling='avg'

Однако,вектор, который я получаю в итоге, имеет только 512 объектов.Учитывая архитектуру VGG16:

VGG16's architecture

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

Так я должен получить 512 или 4096 функций?

1 Ответ

1 голос
/ 03 июля 2019

Согласно документации Keras , когда вы устанавливаете include_top = False, он пропускает последние 3 слоя Fully Connected (FC), так что интуитивно вы должны получить 512 векторов объектов, который является правильным. Если вы хотите рассмотреть последние 3 слоя ФК, установите include_top = True. Тогда вы получите прогноз 1000 объектов (учитывая слой softmax в конце).

Попробуйте выполнить:

vggmodel = keras.applications.vgg16.VGG16(weights='imagenet', include_top=False, pooling='avg')
vggmodel.summary()

и

vggmodel = keras.applications.vgg16.VGG16(weights='imagenet', include_top=True, pooling='avg') 
vggmodel.summary()

чтобы получить более полное понимание.

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