bn層におけるトレーニングとテストの書き換え

2155 ワード

Detailed Description about BatchNormLayer
“Normalizes the input to have 0-mean and/or unit (1) variance across the batch.
This layer computes Batch Normalization as described in [1]. For each channel in the data (i.e. axis 1), it subtracts the mean and divides by the variance, where both statistics are computed across both spatial dimensions and across the different examples in the batch.
By default, during training time, the network is computing global mean/variance statistics via a running average, which is then used at test time to allow deterministic outputs for each input. You can manually toggle whether the network is accumulating or using the statistics via the use_global_stats option. For reference, these statistics are kept in the layer’s three blobs: (0) mean, (1) variance, and (2) moving average factor.”
出会った問題
通常の積層層で積層されたネットワークでは,BN層を添加しないと訓練が効果的で正常に動作し,BN層を添加するとlossが87.3365に収束しない場合があった.
BN層を加えた後のlossは87.3365の解決方法である.
BNレイヤにパラメータuse_がありますglobal_statsは、訓練時にfalseに設定する必要があります.これにより、BN層は計算平均値と分散を更新することができます.trueに設定すると、初期固定であり、更新されません.テスト時にtrueに設定する必要があります.ネットワーク内のこのパラメータを修正すると正常に訓練されます.
他の収束しない問題(lossが87.3365でlossが高くないなど)の解決策
solverで設定できます:debug_info:true、各層のdataとdiffがどんな値なのか見てみましょう.一般的にこのときの値はNAN(無効な数字)ではなくINF(無限大)です.
データラベルが0から連続しているかどうかを確認します.
学習率をlrを下げる;
データの問題、lmdb生成に誤りがある;
中間層が正規化されていないため、いくつかの層を通過した後、出力の値はすでに小さくなり、この時に勾配を計算するのは気まずいので、各ボリューム層の後にBN層とSCALE層を加えることを試みることができます.
base_をlrを低くし、batchsizeも高くします.
Dataレイヤの入力ピクチャを正規化すると、0-255から0-1に正規化され、使用パラメータは:である.
 transform_param {  
    scale: 0.00390625// ,1/255
  } 

1
2
3
ネットワークパラメータが多すぎて、ネットワークが深すぎて、何層か削除してみて、データが少ないため、中間層のnum_を減らす必要があるかもしれません.output;
shuffleデータを覚えておいてください.そうしないと、データがランダムではなく、いくつかのbatch間のデータの違いが小さいです.