我在Keras中创建了CNN,如下所示。我正在使用CNN进行三个类别的分类。输入是几个用户的热图图像,显示了例如一个网页。每个用户大约有300张热图。假设我有80个用户。我想在60位用户(18000张热图)上训练网络,并在20位用户(6000张热图)上验证网络。
对于20个用户,我想在用户数据集的前半部分(150个热图)上微调网络,然后在数据的后半部分(150个热图)上对其进行评估。为了进行微调,我将学习率除以10。在这种用例中,不冻结任何模型层都可以吗?我的模型非常浅(只有三个转换层),所以冻结任何层都没有意义。
我认为正确处理批处理规范化层也至关重要。我已经读过trainable
或training
应该设置为false。我应该使用哪一个?我也很困惑如何将training
设置为false(不能将其设置为BatchNormalization
的参数)。
第二,在下面显示的模型中,我可以轻松调整图层,但是假设我正在使用load_model()
从h5文件中加载模型。在这种情况下,如何将trainable
或training
设置为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()])