Тонкая модель InceptionV3 работает не так, как ожидалось - PullRequest
0 голосов
/ 19 мая 2019

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

RuntimeError: Вы пытались вызвать count_params для density_7, но слой не построен.Вы можете создать его вручную с помощью: dense_7.build(batch_input_shape).

from keras import applications
pretrained_model = applications.inception_v3.InceptionV3(weights = "imagenet", include_top=False, input_shape = (299, 299, 3))

from keras.layers import Dense
for layer in pretrained_model.layers:
  layer.trainable = False

pretrained_model.layers.pop()

layer = (Dense(2, activation='sigmoid'))
pretrained_model.layers.append(layer)

Повторное рассмотрение резюме дает приведенное выше исключение.

pretrained_model.summary()

Хотел обучить компиляции и подгонке модели, но

pretrained_model.compile(optimizer=RMSprop(lr=0.0001), 
              loss = 'sparse_categorical_crossentropy', metrics = ['acc'])

Выше этой строки выдает эту ошибку,

Не удалось интерпретировать идентификатор оптимизатора:

1 Ответ

0 голосов
/ 20 мая 2019

Вы используете pop, чтобы вытолкнуть полностью подключенный слой как Dense в конце сети. Но это уже достигнуто аргументом include top = False. Так что вам просто нужно инициализировать Inception с include_top = False, добавить последний плотный слой. Кроме того, поскольку это InceptionV3, я предлагаю вам добавить GlobalAveragePooling2D() после вывода InceptionV3, чтобы уменьшить переоснащение. Вот код,

from keras import applications
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D

pretrained_model = applications.inception_v3.InceptionV3(weights = "imagenet", include_top=False, input_shape = (299, 299, 3))


x = pretrained_model.output
x = GlobalAveragePooling2D()(x) #Highly reccomended

layer = Dense(2, activation='sigmoid')(x)

model = Model(input=pretrained_model.input, output=layer)

for layer in pretrained_model.layers:
  layer.trainable = False

model.summary()

Это должно дать вам желаемую модель для точной настройки.

...