【发布时间】:2021-05-27 02:00:03
【问题描述】:
我使用的迁移学习模型与Chollet's keras Transfer learning guide 中解释的非常相似。为了避免批量归一化层出现问题,如指南和许多其他地方所述,我必须将原始预训练的基本模型作为功能模型插入,使用 training=false 选项,如下所示:
inputs = layers.Input(shape=(224,224, 3))
x = img_augmentation(inputs)
baseModel = VGG19(weights="imagenet", include_top=False,input_tensor=x)
x=baseModel(x,training=False)
# construct the head of the model that will be placed on top of the
# the base model
x=Conv2D(32,2)(x)
headModel = AveragePooling2D(pool_size=(4, 4))(x)
headModel = Flatten(name="flatten")(headModel)
headModel = Dense(64, activation="relu")(headModel)
headModel = Dropout(0.5)(headModel)
headModel = Dense(3, activation="softmax")(headModel)
model = Model(inputs, outputs=headModel)
我的问题是我需要像Chollet's gradcam example page 那样使用gradcam。为此,我需要访问 basemodel 最后一个卷积层,但是当我总结我的模型时,我得到:
Model: "model_163"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_3 (InputLayer) [(None, 224, 224, 3)] 0
_________________________________________________________________
img_augmentation (Sequential (None, 224, 224, 3) 0
_________________________________________________________________
vgg19 (Functional) (None, 7, 7, 512) 20024384
_________________________________________________________________
conv2d_2 (Conv2D) (None, 6, 6, 32) 65568
_________________________________________________________________
average_pooling2d_2 (Average (None, 1, 1, 32) 0
_________________________________________________________________
flatten (Flatten) (None, 32) 0
_________________________________________________________________
dense_4 (Dense) (None, 64) 2112
_________________________________________________________________
dropout_2 (Dropout) (None, 64) 0
_________________________________________________________________
dense_5 (Dense) (None, 3) 195
=================================================================
Total params: 20,092,259
Trainable params: 67,875
Non-trainable params: 20,024,384
__________________________________________
因此,我需要的输出位于 vgg19 功能模型层之一。如何在不删除 training=True 选项的情况下访问该层?
【问题讨论】:
标签: tensorflow2.0 heatmap keras-layer transfer-learning batch-normalization