我如何知道我是否已成功冻结或解冻Keras中的图层?

时间:2019-07-22 03:30:24

标签: keras

您如何知道何时成功在Keras中冻结了图层?下面是我的模型的一个片段,其中我试图冻结整个DenseNet121层;但是,我不确定这是否确实在发生,因为控制台的输出不能指示正在发生的情况。

我尝试了两种方法(1)densenet.trainable = False和(2)model.layers[0].trainable = False

此外,如果我再次加载模型并添加model.layers[0].trainable = True,这会解冻图层吗?

densenet = DenseNet121(
    weights='/{}'.format(WEIGHTS_FILE_NAME),
    include_top=False,
    input_shape=(IMG_SIZE, IMG_SIZE, 3)
)

model = Sequential()
model.add(densenet)

model.add(layers.GlobalAveragePooling2D())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(NUM_CLASSES, activation='sigmoid'))
model.summary()

# This is how I freeze my layers, I decided to do it twice because I wasn't sure if it was working
densenet.trainable = False
model.layers[0].trainable = False

history = model.fit_generator(
                    datagen.flow(x_train, y_train, batch_size=BATCH_SIZE),
                    steps_per_epoch=len(x_train) / BATCH_SIZE,
                    epochs=NUM_EPOCHS,
                    validation_data=(x_test, y_test),
                    callbacks=callbacks_list,
                    max_queue_size=2
                   )

下面是model.summary()的输出,我希望该输出指示图层是否已成功冻结。

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
densenet121 (Model)          (None, 8, 8, 1024)        7037504   
_________________________________________________________________
global_average_pooling2d_3 ( (None, 1024)              0         
_________________________________________________________________
dropout_2 (Dropout)          (None, 1024)              0         
_________________________________________________________________
dense_2 (Dense)              (None, 5)                 5125      
=================================================================
Total params: 7,042,629
Trainable params: 5,125
Non-trainable params: 7,037,504
_________________________________________________________________
Epoch 1/100
354/353 [==============================] - 203s 573ms/step - loss: 0.4374 - acc: 0.8098 - val_loss: 0.3785 - val_acc: 0.8290
val_kappa: 0.0440
Epoch 2/100
354/353 [==============================] - 199s 561ms/step - loss: 0.3738 - acc: 0.8457 - val_loss: 0.3575 - val_acc: 0.8310
val_kappa: 0.0463
Epoch 3/100

1 个答案:

答案 0 :(得分:1)

  

但是,由于输出到   控制台不会指示正在发生什么。

从可训练参数的数量可以看出。不出所料,只有最后一个密集层的参数(5125)是可训练的。

Total params: 7,042,629
Trainable params: 5,125
Non-trainable params: 7,037,504
相关问题