如上所述
然而,在BatchNormalization层的情况下,在层上设置trainable = False意味着该层随后将在推理模式下运行(这意味着它将使用移动平均值和移动方差来规范化当前批,而不是使用当前批的平均值和方差)。
如果我最初设置trainable = False
,那么它将使模型在推理模式下运行,即上述官方文档中所述的training = False
。但是,如果我在上述步骤后重置trainable = True
会发生什么?training
属性会重置为True
吗?还是继续在推理模式下运行?
好的。所以,我从这里得到了答案
当您为了进行微调而解冻包含BatchNormalization层的模型时,您应该在调用基本模型时通过传递training=False来保持BatchNormalization层处于推理模式。否则,应用于不可训练权值的更新会突然破坏模型所学到的内容。