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

问题描述

我在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,activation='relu'))  # 1
model.add(Batchnormalization())
model.add(MaxPooling2D())
model.add(Dropout(0.25))

model.add(Conv2D(64,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()])

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...