【发布时间】:2020-11-30 19:29:35
【问题描述】:
在Tensorflow guide about transfer learning,他们说:
当您解冻包含 BatchNormalization 层的模型以进行微调时,您应该通过在调用基本模型时传递 training=False 将 BatchNormalization 层保持在推理模式。
我的理解是,即使我解冻层,如果预训练模型包含 BatchNormalization 层,我应该像下面的代码一样设置 'traininig=False':
resnet = ResNet50(weights='imagenet', include_top=False)
resnet.trainable = True # unfreeze
inputs = Input(shape=(150,150,3))
x = resnet(inputs, training=False) # because of BN
x = GlobalAveragePooling2D()(x)
x = Dropout(0.2)(x)
outputs = Dense(150,kernel_regularizer=regularizers.l2(0.005), activation='softmax')(x)
但是,我的准确率非常低,很少发生学习,而当我将训练设置为 True 时,准确率得到了满足。
所以,这些是我的问题:
- 在使用 BN 建模时将训练设置为 True 是否有误?
- “培训=假”是什么意思?我认为这与反向传播有关。
提前致谢!
【问题讨论】:
标签: tensorflow keras deep-learning