访问最后一个卷积层迁移学习

时间:2021-05-10 10:34:30

标签: python tensorflow keras heatmap transfer-learning

我正在尝试从计算机视觉模型中获取一些热图,该模型已经在对图像进行分类,但我发现了一些困难。 这是模型摘要:

model.summary()
Model: "model_4"

Layer (type)                 Output Shape              Param #   
=================================================================
input_9 (InputLayer)         [(None, 512, 512, 1)]     0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 512, 512, 3)       30        
_________________________________________________________________
densenet121 (Functional)     (None, 1024)              7037504   
_________________________________________________________________
dense_4 (Dense)              (None, 100)               102500    
_________________________________________________________________
dropout_4 (Dropout)          (None, 100)               0         
_________________________________________________________________
predictions (Dense)          (None, 2)                 202       
=================================================================
Total params: 7,140,236
Trainable params: 7,056,588
Non-trainable params: 83,648

作为创建热图的标准过程的一部分,我知道我必须访问模型中的最后一个卷积层,在这种情况下,我会说它是 Densenet121 内部的一个层,但我找不到访问属于densenet121的所有层的方法。

现在,我一直在使用 conv2d_4 层来运行一些测试,但我觉得这不是正确的方法,因为该层是在来自密集网的所有迁移学习工作之前。

另外,我刚刚在KErar官方文档中查找了Funcitnal层,但我没有找到,所以我猜它不是一个层,它就像嵌入在那里的孔densenet模型,但我找不到访问的方法.

顺便说一下,我在这里分享模型构建,因为它可能有助于回答这个问题:

from tensorflow.keras.applications.densenet import DenseNet121

num_classes = 2
input_tensor = Input(shape=(IMG_SIZE,IMG_SIZE,1))
x = Conv2D(3,(3,3), padding='same')(input_tensor)   
x = DenseNet121(include_top=False, classes=2, pooling="avg", weights="imagenet")(x)

x = Dense(100)(x)
x = Dropout(0.45)(x)
predictions = Dense(num_classes, activation='softmax', name="predictions")(x)
model = Model(inputs=input_tensor, outputs=predictions)   

1 个答案:

答案 0 :(得分:0)

我发现你可以使用 .get_layer() 两次访问功能密集网络模型中的层嵌入到“主”模型中。

在这种情况下,我可以使用 model.get_layer('densenet121').summary() 检查嵌入模型中的所有 thje 层,然后将它们与以下代码一起使用:model.get_layer('densenet121').get_layer('xxxxx')