先回は、有名なCIFAR-10という一般物体認識用のデータセットをダウンロードしましたので、今回は、それを使って画像分類をしてみたいと思います。カエル、馬、船、トラックの10種類の画像があります。乗り物が4種類、陸の動物が6種類で、海の動物や植物は見当たりません。誰が選んだか分かりませんが、少し偏った趣味の方なのかな(笑)。各種類の画像を見ると、様々な角度から撮ってあり、遠景ありズームアップありとバリエーションが豊かです。32×32ピクセルと小さくて、とりあえずディープラーニングの学習・評価をやってみたい向きには手頃で良いですが、見やすくしようと拡大すると、かなりボケた感じになります。10,000枚に振り分けられています。初めから登録されているサンプルプロジェクトから適当なものを選び、修正して使っているのですが、今回は過去に発表された有名なモデルを参考に、オリジナルを作ってみたいと思います。2012年に優勝し、画像認識の世界に革命を起こしたニューラルネットワークです。出現によって画像認識の考え方が180度変わりました。人は機械に大量の画像を見せるだけで機械が画像の特徴を見つけ出して覚えるんです。前年よりいっきに10%の改善をし2位以下に大差を付けてぶっちぎりで優勝したのです。Facebookは、ディープラーニングを研究している会社をどどん買収して行きました。その設計図を見てみましょう。入力はカラー224×224ピクセルで、そこから後が上下に分かれ上の方は図が切れていますが、上下は同じものです。2つに分かれている理由は、2012年当時のGPUの性能から、全部を1枚のGPUに載せることはできなかったので、2枚に分けたということらしいです。13×13(256枚)、その後プーリングで全結合層に繋がっています。ILSVRCでは、1,000種類の画像分類をするので、最後の全結合層は1,000になっています。特徴的なのは、224×224の画像を13×13まで縮小して、3段の畳み込みを掛けているところでしょうか。入っていて過学習を防いでいます。227×227の間違いではないかとの情報が多々ありましたが、これは一理あります。パディングしても計算が合いません。入力を227×227にするでしょうか。すると、畳み込みの設定が違うのかもしれませんが、このあたりは謎です(笑)。設計します一番の問題は入力サイズが大きく異なることです。なんと1/7しかないです。1つは、計算パワーの問題。私のGPU無しの環境(MacbookAir)では、フィルターの枚数はある程度落とさざるを得ないです。設計図を書いてみます。1段目の畳み込みは、2~5段目と同じく、フェイルター3×3、パディング1、ストライド1で、畳み込みをしてもサイズは変えない仕様にしてます。プーリングが3段入るので、32→16→8→4と縮小され、全結合層に入る時には4×4ピクセルになってしまいますが、まあ良しとしましょう。後、畳み込み1と畳み込み2にはBatchNormalizationを追加しています。一応、これで5段の畳み込み層と3段のプーリング層は確保しました(笑い)。入力する設定をまとめてみます。フィルターのことですね。入力するとこんな形になります。重そうなプログラですので、まずEpoch5で学習スタートします。