我正在尝试从计算机视觉模型中获取一些热图,该模型已经在对图像进行分类,但我发现了一些困难。 这是模型摘要:
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)
答案 0 :(得分:0)
我发现你可以使用
.get_layer()
两次访问功能密集网络模型中的层嵌入到“主”模型中。
在这种情况下,我可以使用 model.get_layer('densenet121').summary()
检查嵌入模型中的所有 thje 层,然后将它们与以下代码一起使用:model.get_layer('densenet121').get_layer('xxxxx')