在微调期间处理批次归一化层(可训练与训练)

时间:2020-10-05 12:47:49

标签: python keras conv-neural-network tf.keras batch-normalization

我在Keras中创建了CNN,如下所示。我正在使用CNN进行三个类别的分类。输入是几个用户的热图图像,显示了例如一个网页。每个用户大约有300张热图。假设我有80个用户。我想在60位用户(18000张热图)上训练网络,并在20位用户(6000张热图)上验证网络。

对于20个用户,我想在用户数据集的前半部分(150个热图)上微调网络,然后在数据的后半部分(150个热图)上对其进行评估。为了进行微调,我将学习率除以10。在这种用例中,不冻结任何模型层都可以吗?我的模型非常浅(只有三个转换层),所以冻结任何层都没有意义。

我认为正确处理批处理规范化层也至关重要。我已经读过trainabletraining应该设置为false。我应该使用哪一个?我也很困惑如何将training设置为false(不能将其设置为BatchNormalization的参数)。

第二,在下面显示的模型中,我可以轻松调整图层,但是假设我正在使用load_model()从h5文件中加载模型。在这种情况下,如何将trainabletraining设置为false?

model = Sequential()
model.add(Conv2D(64, kernel_size=(3, 3), padding="same",
                 activation='relu',
                 input_shape=input_shape))  # 0
model.add(BatchNormalization())
model.add(Dropout(0.25))

model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))  # 1
model.add(BatchNormalization())
model.add(MaxPooling2D())
model.add(Dropout(0.25))

model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))  # 1
model.add(BatchNormalization())
model.add(MaxPooling2D())
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(500, use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.25))

model.add(Dense(3))
model.add(Activation('softmax'))

optimizer = optimizers.Adam()

model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy', tf.keras.metrics.AUC()])

0 个答案:

没有答案