【问题标题】:How to calculate batch normalization with python?如何用python计算批量标准化?
【发布时间】:2020-04-26 07:35:27
【问题描述】:

当我从头开始在 python 中实现批量标准化时,我很困惑。请参见 paper 展示了一些关于规范化方法的数据,我认为它可能不正确。描述和图都不正确。

论文描述:

论文中的图: 就我而言,原始论文中批量标准化的表示是不正确的。我在这里发布这个问题以供讨论。 我觉得batch normalization应该如下图。

关键是如何计算mean和std。 特征图的形状为(batch_size, channel_number, width, height)mean = X.mean(axis=(0, 2, 3), keepdims=True) 要么 mean = X.mean(axis=(0, 1), keepdims=True)

哪个是正确的?

【问题讨论】:

    标签: python tensorflow deep-learning batch-normalization


    【解决方案1】:

    您应该计算批次图像中所有像素的均值和标准差。所以使用axis=(0, 2, 3) 参数。 如果通道具有大致相同的分布 - 您也可以计算跨通道的均值和标准差。所以只需使用不带轴参数的 mean() 和 std()。

    文章中的数字是正确的 - 每批次的 H 和 W(图像尺寸)均采用均值和标准差。显然,3d立方体中没有显示通道。

    【讨论】:

    • 谢谢。您能否也请参阅here 了解有关此问题的更多详细信息?希望再次聆听您的回答。
    • 批量图像的平均值和标准应该只是一个数字,(或者如果您选择为每个通道这样做,则为 3 个数字)。然后从每个像素值中减去这个单一平均值,然后将每个像素值除以 std。运行这个算法,看看它是否有效。
    • 谢谢,它有效。令我困惑的是,为什么有些人认为 batch_size=1 会导致除以零?
    • 那些认为 batch_size=1 会导致除以零的人假设 std 是为每个像素单独计算的。但即使对于 batch_size=1,它也是跨 H*W 像素计算的。请接受答案。
    • 非常感谢您的回答!爱你!
    猜你喜欢
    • 2017-10-21
    • 2022-01-23
    • 2020-02-28
    • 2017-03-03
    • 1970-01-01
    • 2018-04-09
    • 2016-03-01
    • 2022-01-21
    • 2018-06-05
    相关资源
    最近更新 更多