Да, вы можете.Два разных способа.
Во-первых, трудный путь заставляет вас строить две новые модели: одну со всеми замороженными слоями, одну со всеми обучаемыми слоями.Добавьте слой Flatten () в модель только для замороженных слоев.И вы будете копировать весовые коэффициенты из mobilenet v2 слой за слоем, чтобы заполнить весовые характеристики модели только для замороженных слоев.Затем вы проведете свои входные изображения через модель «только замороженные слои», сохраняя вывод на диск в виде CSV или в форме маринада.Теперь это вход для вашей модели обучаемых слоев, которую вы тренируете с помощью команды model.fit (), как вы делали выше.Сохраняйте вес, когда закончите тренировку.Затем вам нужно будет построить оригинальную модель с обоими наборами слоев, загрузить веса в каждый слой и сохранить все.Готово!
Однако проще всего сохранить веса вашей модели отдельно от архитектуры с помощью:
model.save_weights(filename)
, а затем изменить свойство layer.trainable слоев вMobileNetV2 перед добавлением его в новую пустую модель:
mbnetv2_conv = MobileNetV2(weights='imagenet', include_top=False, input_shape=(image_size, image_size, 3))
for layer in mbnetv2_conv.layers[:153]:
layer.trainable = False
model = models.Sequential()
model.add(mbnetv2_conv)
, а затем перезагрузите веса с помощью
newmodel.load_weights(filename)
Это позволяет вам настроить, какие слои в вашей модели mbnetv2_conv вы будете тренировать наfly, а затем просто вызовите model.fit (), чтобы продолжить обучение.