2017年 09月 23日 ( 1 )

いろいろと試しています。
まずネットの構造は大体決まって、

3層の畳み込み層と2層の全結合層(出力層含め)。
畳み込み層のカーネルサイズは3×3で、パディングとストライドはどちらも1。チャンネル数は順に32,32,64。
畳み込み層の後には BatchNormalization と サイズ2、ストライド2のMaxPooling がある。
つまり、層毎に縦横のサイズが半分になる。
全結合の隠れ層の数は512で後にはやはり、BatchNomalization がある。
こんな感じの結果が出てます。
f0054075_13364425.png
BatchNormalization はいろいろと覚えておかないといけないので無しで試してみた。全然だめだ。
f0054075_13380578.png
なら、BatchNormalization の β と γ を固定した簡易版を作って試した見た。これで良いみたいな感じです。
f0054075_13393528.png
よく考えてみると、BatchNormalization を使うときはバイアスは要らないって書いていたのを思い出したので、バイアス削除。
f0054075_13405052.png

これをスタート地点にしてみようと思うのだが、ゼロから作る Deep Learning の畳み込み用の BatchNormalization の実装間違ってませんか? 入力を4次元で N, C, H, W とすると、N の平均と分散しかとってないですよね。ここ とか見るとN,H,W 全部の平均と分散を取っているように見えるけど… どっちが正しいの?

[追記]
N,H,W 全部の平均と分散を取るように変更してみました。これで覚えておくパラメータがだいぶ減るはずです。そして肝心の認識精度は… 上がってるじゃん。パラメータ数が減って過学習が抑えられたのかな?良いことづくめじゃん。
f0054075_18454297.png
GitHub 更新しました。

[PR]
by tom01h | 2017-09-23 13:45 | 本・映画など | Trackback | Comments(0)