【问题标题】:Batch Normalization: Axis on which to take mean and variance批量标准化:取均值和方差的轴
【发布时间】:2016-03-03 22:44:48
【问题描述】:

我正在尝试在我的卷积神经网络中实现批量归一化 (http://arxiv.org/pdf/1502.03167.pdf),但我真的很困惑我应该围绕哪个轴计算均值和方差。

如果卷积层的输入形状为 3 * 224 * 224 * 32
其中:
3-输入通道。
224*224-单通道形状
32-小批量大小

下面公式中的轴应该是什么
平均值 = numpy.mean(input_layer, axis= ? )

并且,如果全连接层的输入形状为 100 * 32
其中:
100- 输入数量
32-小批量大小

再次,以下公式中的轴应该是什么
平均值 = numpy.mean(input_layer, axis= ? )

【问题讨论】:

    标签: neural-network conv-neural-network


    【解决方案1】:
    # 1. axis = (1,2,3)
    numpy.mean(input_layer,axis=(1,2,3)) 
    # 2. axis = 1
    numpy.mean(input_layer,axis=1)
    

    对于具有共享权重的卷积层,它使用特征归一化,对于全连接层,它使用样本归一化。

    Keras库BN层代码供参考:https://github.com/fchollet/keras/blob/0daec53acbf4c3df6c054b36ece5c1ae2db55d86/keras/layers/normalization.py

    【讨论】:

    • 您好,dontloo,感谢您的回复。但是在第 3.2 节(Batach Normalization Convolutoinal Networks)下的 BN 论文中,提到:“我们使用大小为 m' = |B| = m · pq 的有效小批量”,其中 p x q 是特征图的大小.那么是不是意味着卷积层和全连接层的轴应该不同呢?
    • @Amrit 是的,你是对的,非常抱歉我的废话回答。我会稍微更新一下并链接一些代码以供参考。
    • 谢谢,这对我来说似乎是正确的。顺便提一下:我想我们也可以使用 "numpy.mean(input_layer, axis= (1,2,3) )" 作为 conv 层,这是您答案的更紧凑形式。
    • @Amrit 是的,你又是对的,就像你已经回答了自己的问题,我只是在这里为你写下来,哈哈
    猜你喜欢
    • 2019-08-20
    • 2020-12-26
    • 2014-01-07
    • 1970-01-01
    • 2017-10-09
    • 2018-06-17
    • 2014-04-27
    • 2021-10-14
    • 2020-04-15
    相关资源
    最近更新 更多