我对应该如何在模型中使用/插入"BatchNorm"层感到有些困惑。
我看到几种不同的方法,例如:

ResNets"BatchNorm" + "Scale"(不共享参数)

"BatchNorm"层后紧跟"Scale"层:

layer {
    bottom: "res2a_branch1"
    top: "res2a_branch1"
    name: "bn2a_branch1"
    type: "BatchNorm"
    batch_norm_param {
        use_global_stats: true
    }
}

layer {
    bottom: "res2a_branch1"
    top: "res2a_branch1"
    name: "scale2a_branch1"
    type: "Scale"
    scale_param {
        bias_term: true
    }
}


cifar10 example:仅"BatchNorm"

在caffe附带的cifar10示例中,使用"BatchNorm"且后面没有任何"Scale"

layer {
  name: "bn1"
  type: "BatchNorm"
  bottom: "pool1"
  top: "bn1"
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
}


cifar10 batch_norm_paramTRAIN的不同TEST

batch_norm_param: use_global_scaleTRAINTEST阶段之间更改:

layer {
  name: "bn1"
  type: "BatchNorm"
  bottom: "pool1"
  top: "bn1"
  batch_norm_param {
    use_global_stats: false
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  include {
    phase: TRAIN
  }
}
layer {
  name: "bn1"
  type: "BatchNorm"
  bottom: "pool1"
  top: "bn1"
  batch_norm_param {
    use_global_stats: true
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  include {
    phase: TEST
  }
}


那应该是什么?

如何在caffe中使用"BatchNorm"层?

最佳答案

如果您遵循原始论文,则批处理归一化后应跟随“缩放”和“偏置”层(可以通过“缩放”来包括偏差,尽管这会使“偏置”参数不可访问)。还应将use_global_stats从训练(False)更改为测试/部署(True)-这是默认行为。请注意,您提供的第一个示例是用于部署的原型,因此将其设置为True是正确的。

我不确定共享参数。

我提出了一个拉式请求,以改进批标准化中的文档,但是由于要修改它而关闭了它。然后,我再也回不去了。

请注意,尽管我现在找不到对应的PR,但我认为不再需要lr_mult: 0代替"BatchNorm"

关于machine-learning - 在咖啡中应如何使用“BatchNorm”层?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41608242/

10-12 16:43