【发布时间】:2018-09-15 06:48:14
【问题描述】:
现在我有一个名为 model1 的模型:
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_3 (InputLayer) (None, 101, 101, 1) 0
__________________________________________________________________________________________________
up_sampling2d_2 (UpSampling2D) (None, 202, 202, 1) 0 input_3[0][0]
__________________________________________________________________________________________________
zero_padding2d_36 (ZeroPadding2 (None, 256, 256, 1) 0 up_sampling2d_2[0][0]
__________________________________________________________________________________________________
conv2d_3 (Conv2D) (None, 256, 256, 3) 6 zero_padding2d_36[0][0]
__________________________________________________________________________________________________
u-resnet34 (Model) (None, 256, 256, 1) 24453178 conv2d_3[0][0]
__________________________________________________________________________________________________
input_4 (InputLayer) (None, 1, 1, 1) 0
__________________________________________________________________________________________________
cropping2d_2 (Cropping2D) (None, 202, 202, 1) 0 u-resnet34[1][0]
__________________________________________________________________________________________________
lambda_3 (Lambda) (None, 1, 1, 1) 0 input_4[0][0]
__________________________________________________________________________________________________
max_pooling2d_2 (MaxPooling2D) (None, 101, 101, 1) 0 cropping2d_2[0][0]
__________________________________________________________________________________________________
lambda_4 (Lambda) (None, 101, 101, 1) 0 lambda_3[0][0]
__________________________________________________________________________________________________
concatenate_10 (Concatenate) (None, 101, 101, 2) 0 max_pooling2d_2[0][0]
lambda_4[0][0]
__________________________________________________________________________________________________
conv2d_14 (Conv2D) (None, 101, 101, 1) 3 concatenate_10[0][0]
==================================================================================================
Total params: 24,453,187
Trainable params: 24,437,821
Non-trainable params: 15,366
_____________________________________
u-resnet34 层是另一个模型,其中包含更多层。我可以打印它的摘要,我可以冻结我想要的任何图层。 当我冻结 u-resnet34 层并打印摘要时,我可以看到可训练参数相应减少。
但是,即使我在模型 1 中冻结模型的层,模型 1 的可训练参数也不会减少。
如何冻结 u-resnet34 层并使其反映在模型 1 的可训练参数上?
编辑: 下面是我的代码
# https://github.com/qubvel/segmentation_models
from segmentation_models import Unet
from keras.models import Model
from keras.layers import Input, Cropping2D, Conv2D
inputs = Input((256, 256, 3))
resnetmodel = Unet(backbone_name='resnet34', encoder_weights='imagenet', input_shape=(256, 256, 3), activation=None)
outputs = resnetmodel(inputs)
outputs = Cropping2D(cropping=((27, 27), (27, 27)) ) (outputs)
outputs = Conv2D(1, (1, 1), activation='sigmoid') (outputs)
model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='adam', loss='binary_crossentropy')
model.summary()
输出:
Total params: 24,453,180
Trainable params: 24,437,814
Non-trainable params: 15,366
然后:
for layer in resnetmodel.layers:
layer.trainable = False
resnetmodel.summary()
哪些输出:
Total params: 24,453,178
Trainable params: 0
Non-trainable params: 24,453,178
最后是这样的:
model.summary()
哪个输出这个:
Total params: 48,890,992
Trainable params: 24,437,814
Non-trainable params: 24,453,178
【问题讨论】:
-
首先你提到当你冻结u-resnet34的层时,它会反映在模型摘要中。然后你提到它没有反映。哪一个是正确的?还是我错过了什么?
-
有两个总结。一个用于u-resnet34模型,另一个用于model1,里面有u-resnet34。
-
在这两种情况下可以添加用于冻结图层的代码吗?
-
第一个和最后一个摘要都属于
model,但参数总数不同。怎么样? -
我自己也想知道,但我认为您也可以在那里重现问题。