tensorflow keras中为迁移学习构建的模型摘要



我使用tensorflow 2.6 keras进行迁移学习。目前我使用MobileNetV2。我接受输入,使用Lambda层进行一些预处理,然后将预处理后的输入输入到MobileNetV2,然后添加Dense层并训练它。训练、推理等实际起到了预期的作用。

然而,该模型的摘要如下:

Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
input (InputLayer)           [(None, 201, 189, 1)]     0
_________________________________________________________________
lambda (Lambda)              (None, 201, 189, None)    0
_________________________________________________________________
lambda_1 (Lambda)            (None, 201, 189, None)    0
_________________________________________________________________
mobilenetv2_1.00_224 (Functi (None, 7, 6, 1280)        2257984
_________________________________________________________________
flatten (Flatten)            (None, 53760)             0
_________________________________________________________________
output (Dense)               (None, 2)                 107522
=================================================================
Total params: 2,365,506
Trainable params: 2,331,394
Non-trainable params: 34,112

因此,MobileNetV2结构被隐藏并显示为类型为tensorflow.python.keras.engine.functional.Functional的一层。如果我打印这个层的摘要,我会得到模型的所有内部层。我有一个用于自动GradCam可视化的脚本,它会查找模型的最后一个Conv层。如果模型是使用Lambda、Conv2D、Dense层手动构建的,那么每个层都可以正常工作。如果我使用预训练的模型,那么目前它失败了,因为Conv层隐藏在这个函数层内部。

如何使用附加层构建修改后的MobileNetV2模型,以便显示模型的完整结构?

这就是我大致构建最终模型的方式:

input = Input(shape=params.image_shape, name="input")
flow = input
flow = input_correction(flow, params) #some Lambda layers
keras_model = MobileNetV2(
input_shape=image_shape,
weights='imagenet',
include_top=False)
keras_model_output=keras_model(flow)
keras_model_input=input
keras_model_output = Flatten()(keras_model_output)
output = Dense(units=len(params.classes),
activation=tf.nn.softmax,
name="output")(keras_model_output)
model = Model(inputs=keras_model_input, outputs=output)
model.compile(...)

默认情况下,summary不显示嵌套模型。只需在摘要中包含expand_nested参数即可。

model.summary(expand_nested=True)

最新更新