Я изучаю CNN по классическому набору данных Cat-Dog Kaggle.Я пытаюсь реализовать разные архитектуры CNN;ResNet - следующий в списке.
Я понимаю, что ResNet (в частности, ResNet50) является функциональной моделью.Последний слой выглядит следующим образом:
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
fc1000 (Dense) (None, 1000) 2049000 avg_pool[0][0]
Я хочу изменить его на плотный слой с 2 выходами.Когда я делал это с VGG-16, я использовал следующий код:
vgg16_model = Sequential()
for layer in pre_vgg16_model.layers:
vgg16_model.add(layer)
vgg16_model.layers.pop()
for layer in vgg16_model.layers:
layer.trainable = False
vgg16_model.add(Dense(2, activation='softmax'))
Естественно, здесь это не сработает, потому что он не последовательный.Документация Keras, кажется, указывает на то, что функциональные модели построены в более «голом» стиле, определяя и переопределяя тензоры по мере разработки модели.Проблема в том, что, если я это сделаю, я потеряю преимущество предварительной подготовки.
Как я могу выполнить аналогичное извлечение и замену окончательного слоя Dense для функциональной модели CNN?