【问题标题】:Can we use batch normalization with transfer learning for an instance with different data distribution?我们可以对具有不同数据分布的实例使用批量标准化和迁移学习吗?
【发布时间】:2017-11-20 10:17:06
【问题描述】:

这个tutorial 具有用于训练和测试阶段的批量正常层的张量流实现。

当我们使用迁移学习时,可以使用批量归一化层吗?特别是当数据分布不同时。

因为在推理阶段BN层只使用固定的小批量均值和方差(这是在训练分布的帮助下计算的)。 那么如果我们的模型有不同的数据分布,会不会给出错误的结果?

【问题讨论】:

    标签: tensorflow neural-network deep-learning convolution batch-normalization


    【解决方案1】:

    通过迁移学习,您可以将学习到的参数从一个域迁移到另一个域。 通常,这意味着您要保持卷积层的学习值不变,同时添加新的全连接层来学习对 CNN 提取的特征进行分类。

    当您向每一层添加批量归一化时,您将从输入分布中采样的值注入到层中,以强制输出层服从正态分布。 为此,您需要计算层输出的指数移动平均值,然后在测试阶段,从层输出中减去该值。

    虽然取决于数据,但该平均值(对于每个卷积层)是根据层的输出计算的,因此是根据学习到的变换计算的。

    因此,在我看来,BN 层从其卷积层输出中减去的各种平均值足以进行转移:它们是根据转换后的数据而不是原始数据计算的。 此外,卷积层学习提取局部模式,因此它们更健壮且难以影响。

    因此,简而言之,在我看来:

    您可以应用批量规范的卷积层迁移学习。但是在完全连接的层上,计算值的影响(看到整个输入,而不仅仅是局部补丁)可能依赖于太多的数据,因此我会避免它。

    但是,根据经验,如果您对某事不安全,请尝试一下,看看它是否有效!

    【讨论】:

    • 所以你说FC层之间的BN层应该重新训练,我们可以在卷积层之间使用BN层。我说的对吗?
    • 在我看来,这听起来很合理。但是,只需尝试两者,看看会发生什么。接下来我想知道你的测试结果!
    • 如果我冻结了batch norm层,是否意味着我也冻结了卷积层?例如,在Caffe中VGG19的prototxt文件中,lr_mult的值在conv1_1/bn层设置为0,但在conv1_1层没有设置。这是否意味着conv1_1 层确实学习了?或者conv1_1/bn 层是否将梯度归零?
    猜你喜欢
    • 2020-11-07
    • 2019-12-19
    • 2020-11-30
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    相关资源
    最近更新 更多