"BOKU"のITな日常

BOKUが勉強したり、考えたことを頭の整理を兼ねてまとめてます。

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

f:id:arakan_no_boku:20190326212937j:plain

はじめに

当記事の説明の画面はVersion1.00のものです。

Version1.10で一部アイコンのデザインが変更になっていますが、特に画像の貼り替えはしてません。

内容は2017年10月時点のものです。

LeNet 

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

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

f:id:arakan_no_boku:20170923102525j:plain

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

Neural Network Consoleには、これに基づくサンプルプロジェクトが「LeNet.sdcproj」 として用意されています。

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

LeNet.sdcprojを開く 

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

f:id:arakan_no_boku:20170923104435j:plain

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

学習の実行(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くらいで収束したようなグラフにはなってます。  

Epoch=30で評価の実行 

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

f:id:arakan_no_boku:20170923130011j:plain

 99.04% 

向上しました。 

黎明期のCNN・・みたいないかにも古い的な修飾子をつけて言われることの多いLeNetですけど、MINIST程度のデータなら十分な性能をもっているのがよくわかります。  

CPUオンリーだとLeNetくらいが手頃 

ニューラルネットワークコンソールには、本格的なCNNのサンプルプロジェクトがついてます。

resnetとか(resnet-18、resnet-34、resnet-50、resnet-152・・とか深さのバリエーションが沢山あります)とか。

このへんを使えば、画像分類などでかなりの性能が期待できるのは間違いないのですが、やってみたらわかりますが、ものすごく重い!!です。

GPUマシンとかに高いお金を出せる方なら、resnetとかの方が絶対に精度はでますし、本格的なディープラーニングを試せるからいいと思いますが、CPUオンリーだと、いつ果てるともなく学習が続くので、とても耐えられません。

そういう意味で、LeNetはちょうど手頃です。

CNNのお勉強はLeNet中心で試していくのがいいかなと思ってます。

ではでは。