何回か浅い「なんちゃってCNN」みたいなモデルを作ってきましたが、そろそろ、もう少し本格的なCNNもやってみようかな・・ということで、サンプルプロジェクトとして用意されてる「LeNet.sdcproj」 をさわってみます。
2017/12/02追記
>以降の説明の画面はVersion1.00のものです。
>Version1.10で一部アイコンのデザインが変更になっています。
>ですが、見てわかる範囲と判断して、特に画像の貼り替えはしてません。
LeNetとは
画像認識では定番となった「CNN(Convolutional Neural Network:畳み込みニューラルネットワーク)」を、発明したのは、Yann LeCun先生です。
Object Recognition with Gradient-Based Learning(勾配ベース学習による物体認識)という論文に、その原型が書かれていて、ここに超有名なこの図が書かれてます。
これが、LeNet-5(5層構造なので)です。
サンプルは、これに基づいたものということになるますかね。
LeNetを動かしてみる
ニューラルネットワークコンソールを立ち上げます。
LeNet.sdcprojを開く
プロジェクトの一覧から、LeNet.sdcprojを選んで開きます。
開くとこんな感じです。(ハードコピーの都合で下の方をちょっと横にずらしてます)
よく見ると興味深いところがたくさんあります。
2階層の並びが、Convolution → MaxPooling → Tanh の順だったり・・。
ちなみにTanhというのは、ハイポリックタンジェントといいます。
興味があれば、こちらもどうぞ。
学習の実行(Epoch=10)
とりあえず、何も変えないで学習をします。
学習結果はこんな感じ。
なんか、10Epochだと、途中で学習が終わった感が半端ないですね。
評価の実行
次に評価をします。
結果はこんな感じです。
いい結果ですけどね、Epoch数を増やすと、もっと改善できそうなのでやってみます。
Epoch=30で再度学習
Epoch数を30にしてみます。
上書き保存して学習した結果がこちらです。
なんとなく、20Epochくらいで収束したようなグラフにはなってますね。
評価の実行
評価の結果はこちらです。
99.04%
いい感じです。
黎明期のCNN・・みたいないかにも古い的な修飾子をつけて言われることの多いLeNetですけど、MINISTでなら十分な性能をもっているのがよくわかります。
CPUオンリーだとLeNetくらいが手頃
ニューラルネットワークコンソールには、もっと本格的なCNNのサンプルプロジェクトがついてます。
resnetとか(resnet-18、resnet-34、resnet-50・・とか深さのバリエーションが沢山あります)相当凄いです。
なんせ、2015年のILSVRC'2015 という学会のコンペで、一般物体認識で最高性能を叩き出したモデルですから。
当時 Microsoft Research にいた Kaiming He 氏が開発した、152層!のニューラルネットです。
で・・、ニューラルネットワークコンソールにも「resnet-152」というサンプルプロジェクトがついてます。
やってみたらわかりますが、重い!!です。
GPUマシンとかに高いお金を出せる方なら、resnetとかの方が絶対に精度はでますし、本格的なディープラーニングを試せます。
でもですね。
CPUオンリーだと、いつ果てるともなく学習が続くので、とても耐えられません。
そういう意味で、LeNetはちょうど手頃です。
自分は当面、CNNはLeNet中心で試していくことになると思ってます。
ではでは。