Удалить слои из пользовательской предварительно обученной модели - PullRequest
0 голосов
/ 01 октября 2019

Я перевел обучение по модели Inception из керат следующим образом:

base_model = applications.InceptionV3(weights='imagenet', include_top=False, input_shape=input_shape)

model_top = Sequential()
model_top.add(GlobalAveragePooling2D(input_shape=base_model.output_shape[1:], data_format=None))
model_top.add(Dropout(0.4))
model_top.add(Dense(2))
model_top.add(Activation("softmax"))

# model_top.summary()

model = Model(inputs=base_model.input, outputs=model_top(base_model.output))

Я хочу извлечь функции из слоя GlobalAveragePooling, используя обученную модель, но я не знаю, как получить к ней доступ. После загрузки модели сводка выглядит следующим образом: enter image description here

Если показывать сводку для self.model.layers[-1], я вижу GlobalAveragePooling, Dropout и слой Dense, которые находятся в последовательном, но не начальные слои. То, что я хочу, это начальные слои, за которыми следует только GlobalAveragePooling.

Возможно ли это, или мне нужно заново сделать архитектуру, используя функциональный API, и переучить все это?

Спасибо!

1 Ответ

0 голосов
/ 01 октября 2019

Добавление модели Inception непосредственно в Sequential работает для меня:

from keras import applications
from keras.layers import GlobalAveragePooling2D, Dropout, Dense, Activation
from keras.models import Model, Sequential

input_shape = (299, 299, 3)

base_model = applications.InceptionV3(weights='imagenet', include_top=False, input_shape=input_shape)

model = Sequential([
    applications.InceptionV3(weights='imagenet', include_top=False),
    GlobalAveragePooling2D(),
    Dropout(0.4),
    Dense(2),
    Activation("softmax")
])
model.summary()

submodel = Model(inputs=model.input, outputs=model.get_layer("global_average_pooling2d_1").output)
submodel.summary()
...