web-dev-qa-db-ja.com

「BatchNorm」レイヤーはカフェでどのように使用する必要がありますか?

モデルで _"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の例 :_"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
  }
}
_

cifar1TRAINTESTで_batch_norm_param_が異なる

_batch_norm_param: use_global_scale_はTRAINフェーズとTESTフェーズの間で変更されます:

_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
  }
}
_

それでそれは何であるべきですか?

カフェでどのようにuse _"BatchNorm"_レイヤーを使うべきですか?

13
Shai

元のペーパーに従う場合、バッチの正規化の後には、スケールレイヤーとバイアスレイヤーが続く必要があります(バイアスを使用すると、バイアスパラメーターにアクセスできなくなりますが、バイアスを含めることができます)。 use_global_statsもトレーニング(False)からテスト/デプロイメント(True)に変更する必要があります。これはデフォルトの動作です。最初に指定する例はデプロイメント用のprototxtなので、Trueに設定するのが正しいことに注意してください。

共有パラメーターについてはわかりません。

バッチの正規化でドキュメントを改善するためにプルリクエストを作成しましたが、変更したかったため閉じました。そして、私はそれに戻ることはなかった。

lr_mult: 0 ために "BatchNorm"は不要になりました(おそらく許可されていませんか?)。ただし、対応するPRは今は見つかりません。

5
Jonathan

各BatchNormの後に、Caffeにスケールレイヤーを追加する必要があります。その理由は、Caffe BatchNormレイヤーは、入力データから平均を減算するだけであり、それらの分散で除算されますが、正規化された分布1をそれぞれスケーリングおよびシフトするγおよびβパラメーターは含まれません。逆に、Keras BatchNormalizationレイヤーには、上記のすべてのパラメータ。 Caffeでパラメーター「bias_term」をTrueに設定してスケールレイヤーを使用すると、Kerasバージョンの正確な動作を再現するための安全なトリックが提供されます。 https://www.deepvisionconsulting.com/from-keras-to-caffe/

1
iraf