"BOKU"のITな日常

還暦越えの文系システムエンジニアの”BOKU”は新しいことが大好きです。

CNN(Convolutional Neural Network)の原型「LeNet」を体験する/Neural Network Consoleの使い方

何回か浅い「なんちゃってCNN」みたいなモデルを作ってきましたが、そろそろ、もう少し本格的なCNNもやってみようかな・・ということで、サンプルプロジェクトとして用意されてる「LeNet.sdcproj」 をさわってみます。

f:id:arakan_no_boku:20190326212937j:plain

2017/12/02追記

>以降の説明の画面はVersion1.00のものです。

>Version1.10で一部アイコンのデザインが変更になっています。

>ですが、見てわかる範囲と判断して、特に画像の貼り替えはしてません。

 

LeNetとは

 

画像認識では定番となった「CNN(Convolutional Neural Network:畳み込みニューラルネットワーク)」を、発明したのは、Yann LeCun先生です。 

Object Recognition with Gradient-Based Learning(勾配ベース学習による物体認識)という論文に、その原型が書かれていて、ここに超有名なこの図が書かれてます。

f:id:arakan_no_boku:20170923102525j:plain

これが、LeNet-5(5層構造なので)です。 

サンプルは、これに基づいたものということになるますかね。 

 

 

LeNetを動かしてみる 

 

ニューラルネットワークコンソールを立ち上げます。

 

LeNet.sdcprojを開く

 

プロジェクトの一覧から、LeNet.sdcprojを選んで開きます。  

開くとこんな感じです。(ハードコピーの都合で下の方をちょっと横にずらしてます)

f:id:arakan_no_boku:20170923104435j:plain

 

よく見ると興味深いところがたくさんあります。 

2階層の並びが、Convolution → MaxPooling → Tanh の順だったり・・。 

ちなみにTanhというのは、ハイポリックタンジェントといいます。

興味があれば、こちらもどうぞ。

arakan-pgm-ai.hatenablog.com

arakan-pgm-ai.hatenablog.com

arakan-pgm-ai.hatenablog.com

  

学習の実行(Epoch=10)

 

とりあえず、何も変えないで学習をします。

f:id:arakan_no_boku:20170923104735j:plain

 

学習結果はこんな感じ。

f:id:arakan_no_boku:20170923125626j:plain

 

なんか、10Epochだと、途中で学習が終わった感が半端ないですね。  

 

評価の実行

 

次に評価をします。

f:id:arakan_no_boku:20170923104852j:plain

 

結果はこんな感じです。

f:id:arakan_no_boku:20170923125725j:plain

 

いい結果ですけどね、Epoch数を増やすと、もっと改善できそうなのでやってみます。

 

Epoch=30で再度学習

 

Epoch数を30にしてみます。

f:id:arakan_no_boku:20170923125830j:plain

 

上書き保存して学習した結果がこちらです。

f:id:arakan_no_boku:20170923125916j:plain

 

なんとなく、20Epochくらいで収束したようなグラフにはなってますね。 

 

評価の実行

 

評価の結果はこちらです。

f:id:arakan_no_boku:20170923130011j:plain

 

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中心で試していくことになると思ってます。

ではでは。