2016-06-16 13 views
1

私は中規模のconvネットを持っていますが、バッチ正規化ですっきりとしています。バッチの正規化の効果は非常にポジティブです(10倍以上の訓練速度とはるかに向上した精度)。バッチ正規化によるオーバーフィッティング[テンソルフロー]?

しかし、訓練と検証/テストセットの間には10%に近い精度の格差が大幅に増加しています。これは邪魔です。この隙間は、訓練中ゆっくりと盛り上がる。

BN実装では、標準TF指数移動平均を使用します。これは問題ではないようです。検証とトレーニングの両方が同じ統計を共有しており、テストセット統計に向かって移動平均を「コールドウォームアップ」することも試みました。この手順は効果がなかった。 また、BNがうまく動作するためには、I2の正則化と脱落の両方を無効にする必要がありました。

誰もが似たようなことに遭遇しましたか?何か案は? 「より標準的な」正則化をBNネットワークに追加する方法についての提案はありますか?

+0

バッチノルムはパラメータが非常に少ないため、オーバーフィッティングの原因にはなりません。モデルが十分な時間を訓練していなかったので、あまりにもあまりにも控え目に気付かなかったのでしょうか? –

+0

ありがとうございます。私は、BNにはパラメータで2-3Xを追加すると言いたいと思います。ほとんどの重量に対してシャドウパラメータがあるからです。シンプルに。 [私はまた、畳み込みだけでなく、完全につながったレイヤーを持っています。] 私は以前、あまりにも控え目に気付かなかった可能性があります。 BNなしでは、ネットワークはずっと遅くなりました。しかし、問題は残っています.BNネットワークを適切に正規化するにはどうすればいいですか? – amitmi

+0

私はあなたがBNを誤解していると思うが、2-3倍のパラメータはない。畳み込みの場合、バッチ平均はすべてのフィーチャマップ上で計算されるので、BNは「2 * feature_size」 パラメータ(平均および分散)を有する。 [doc](https://www.tensorflow.org/versions/r0.9/api_docs/python/nn.html#batch_normalization)はそれをうまく説明しています。 –

答えて

0

実行平均と分散の不適切な計算のため、バッチ正規化がオーバーフィッティングのようです。これは、データセットの実行中の最後のバッチがバッチの残りの部分よりもずっと小さく、エラーが複数のエポックに累積する場合にはうれしいことです。

最後のバッチが残りのバッチと同じサイズになっていることを確認します。最後のバッチを無視するだけです。

関連する問題