本教程具有用于训练和测试阶段的批量正常层的张量流实现。
当我们使用迁移学习时,可以使用批量归一化层吗?特别是当数据分布不同时。
因为在推理阶段,BN 层只使用固定的小批量均值和方差(这是在训练分布的帮助下计算的)。那么如果我们的模型有不同的数据分布,它会给出错误的结果吗?
本教程具有用于训练和测试阶段的批量正常层的张量流实现。
当我们使用迁移学习时,可以使用批量归一化层吗?特别是当数据分布不同时。
因为在推理阶段,BN 层只使用固定的小批量均值和方差(这是在训练分布的帮助下计算的)。那么如果我们的模型有不同的数据分布,它会给出错误的结果吗?
通过迁移学习,您可以将学习到的参数从一个域迁移到另一个域。通常,这意味着您要保持卷积层的学习值不变,同时添加新的全连接层来学习对 CNN 提取的特征进行分类。
当您向每一层添加批量标准化时,您将从输入分布中采样的值注入到层中,以强制输出层呈正态分布。为此,您计算层输出的指数移动平均值,然后在测试阶段,从层输出中减去该值。
尽管依赖于数据,但这个平均值(对于每个卷积层)是在层的输出上计算的,因此是在学习的变换上计算的。
因此,在我看来,BN 层从其卷积层输出中减去的各种平均值足以被转移:它们是在转换后的数据上计算的,而不是在原始数据上计算的。此外,卷积层学习提取局部模式,因此它们更健壮且难以影响。
因此,简而言之,在我看来:
您可以应用批量规范的卷积层迁移学习。但是在完全连接的层上,计算值的影响(看到整个输入而不仅仅是局部补丁)可能依赖于太多的数据,因此我会避免它。
但是,根据经验:如果您对某事不安全,请尝试一下,看看它是否有效!