【问题标题】:The order of pooling and normalization layer in convnetconvnet中池化和归一化层的顺序
【发布时间】:2017-02-03 01:10:54
【问题描述】:

我在看TensorFlow implementation of ORC on CIFAR-10,我注意到在第一个 convnet 层之后,它们进行了池化,然后是归一化,但是在第二层之后,它们进行了归一化,然后是池化。

我只是想知道这背后的基本原理是什么,以及关于何时/为什么我们应该选择在泳池之前进行规范的任何提示将不胜感激。谢谢!

【问题讨论】:

    标签: tensorflow conv-neural-network


    【解决方案1】:

    应该先进行池化,然后再进行归一化。

    问题中的原始代码链接不再有效,但我假设所引用的规范化是批量规范化。不过,主要思想可能也适用于其他规范化。正如the paper introducing batch normalization 中的批量标准化作者所指出的,主要目的之一是“标准化层输入”。该想法的简化版本是:如果每一层的输入具有良好、可靠的值分布,则网络可以更轻松地训练。将标准化放在第二位允许这种情况发生。

    作为一个具体的例子,我们可以考虑激活[0, 99, 99, 100]。为简单起见,将使用 0-1 标准化。将使用内核 2 的最大池。如果这些值首先被标准化,我们得到[0, 0.99, 0.99, 1]。然后池化给[0.99, 1]。这不会为下一层提供良好的输入分布。如果我们先合并,我们会得到[99, 100]。然后标准化给出[0, 1]。这意味着我们可以控制输入到下一层的分布,使其成为我们想要的,以最好地促进训练。

    【讨论】:

      【解决方案2】:

      归一化只是归一化。归一化后,最大值仍然是所有值中的最大值。

      So Normalization->Pooling or Pooling->Normaliazaion 结果相同。

      【讨论】:

      • 这不是真的(假设标准化是基于层的所有激活)。最大值的位置相同,但结果值不一样。例如,我们可以考虑 0-1 标准化和最大池化 2。然后对于激活 [0, 1, 1, 2],首先池化将给出 [1, 2],然后标准化将给出 [0, 1]。如果我们首先标准化得到[0, 0.5, 0.5, 1],那么池化将得到[0.5, 1]
      猜你喜欢
      • 2020-10-23
      • 2020-04-18
      • 1970-01-01
      • 2017-05-10
      • 2018-07-26
      • 2017-07-25
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多