アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うこと。

サンプルプロジェクトを元に変更・保存する方法:使い方2/ソニーのニューラルネットワークコンソール

サンプルプロジェクトを動かして結果を見るだけでは、すぐ飽きてきます。

 

やっぱり、自分であれこれ変更を加えて結果がどう変わるかをみたいですよね。

 

なので、やってみます。

 

まったく新規につくるのは、次回のお楽しみにしておいて、今回は、既存のプロジェクトを変更してみる方が簡単ですからね。

 

さて、ベースにするサンプルプロジェクトを何にするかですが。

 

興味深いものがたくさんあります。

 

例えば、Residual Network(ResNet)とか。

 

Long short-term memory(LSTM)とか。

 

ただ、興味深いといっても、この辺は、手をいれるには高度すぎるし、何よりCPUオンリーの環境では実行に時間がかかりすぎます。

 

とりあえず、一番簡単なサンプルにちょっとだけレイヤーを追加して別名で保存するところまでやってみようと思います。

 

まず、ニューラルネットワークコンソールを起動して、「01_logistic_regression.sdcproj」を開きます。

 

前回、動作確認した1層のものです。

 

前回は初期だったので、「一番上のプロジェクト」で行けましたが、プロジェクト一覧は使った日付時刻の降順で常に並び替えされるので、一番上じゃないかもしれません。

 

探して開いて下さい。

f:id:arakan_no_boku:20170819120850j:plain

 

EDITタブを開くと、上図のようになっていて、左側にレイヤーが一覧されてます。

 

このレイヤーを選んでペタペタ貼り付けていくというスタイルみたいです。

 

ただ、さすがにそれぞれのレイヤーの英語名を見て、どういう役割をするレイヤーで、どういう順番に並べないといけないのか・・という、ニューラルネットワーク理論の基本的なところを理解していないと、何を選んでよいのか全くわからないと思います。

 

だから、勉強して、きちんと理解しないと・・と考えると、ハードルが高くなってしまうので、とりあえず、まず動かして遊んでみて、わからない部分は後から勉強するというスタンスで良いんじゃないかと思います。

 

だって、ノンプログラミングでできる最大のメリットですものね。

 

とりあえず、今回は操作方法確認のチュートリアルの続き的感覚で、もともと用意されている以下の層

  • input
  • Affine
  • Sigmoid
  • BinaryCrossEntropy

 

に畳み込み演算をする層を挟み込んで、以下のように変更してみます。

  • input
  • convolution
  • reLU
  • MaxPooling
  • Affine
  • Sigmoid
  • BinaryCrossEntropy

 

このそれぞれのレイヤーが何を意味するのかの説明は後回しにします。

 

とりあえず、今回追加する「convolution」「ReLU」「MaxPooling」の3つの組み合わせを加えると、CNN( Convolution Neural Network)と呼ばれるやり方になり、画像の認識精度向上に効果があると言われているということだけ理解でしょう。

 

追加する層は、inputとAffineの間に挟み込むことになるので、Affine以下のレイヤーをドラッグして下におろして、間をあけてやります。

f:id:arakan_no_boku:20170819123615j:plain

 

左側のレイヤータブから、レイヤーを選択します。

 

ドラッグ&ドロップでも、ダブルクリックでも、どちらでも大丈夫です。

 

Convolution → ReLU → MaxPooling の順に並べます。

f:id:arakan_no_boku:20170819124021j:plain

 

inputとAffineの間にあるリンク(線)を選択して、Deleteキーを押して消します。

f:id:arakan_no_boku:20170819124220j:plain

 

後はリンクを貼っていきます。

 

接続元(上)を選択後、Shiftキーを押しながら、接続先(下)をクリックします。

 

例えば、inputとConvolutionをリンクするなら、inputレイヤーを選択し、Shiftキーを押しながら、Convolutionレイヤーをクリックするわけです。

 

それを順番に繰り返して、最後はMaxPoolingとAffineをリンクすれば完成です。

f:id:arakan_no_boku:20170819124631j:plain

 

Convolution・Poolingを使うときのアウトプットの行列サイズを計算して指定しなくても、リンクを貼るときに自動計算してくれるのは、ありがたいですね。

 

さて、これで学習してみます。

f:id:arakan_no_boku:20170819130252j:plain

 

結果を確認してみます。

f:id:arakan_no_boku:20170819124847j:plain

 

Convolution・Pooling層を追加したことで、明らかにエラー率がさがってますよね。

 

これは期待できそうです。

 

続けて、評価していきます。

f:id:arakan_no_boku:20170819130330j:plain

 

評価結果は下図です。

f:id:arakan_no_boku:20170819125041j:plain

 

Accuracy(正確さ)が、0.984=98.4%に向上しています。

 

変更前が、95.2%ですから、かなり大幅な向上です。

 

ちゃんと、編集した通りにニューラルネットワークが構築されているみたいです。

 

さて、せっかくなので、新しいプロジェクトとして、これも保存しておきます。

 

名前をつけて保存(下図の赤丸)ボタンを押します。

f:id:arakan_no_boku:20170819125417j:plain

 

とりあえず、01_boku01 とでも名前をつけておきます。

f:id:arakan_no_boku:20170819125725j:plain

 

しっかりプロジェクト一覧に追加されてます。

f:id:arakan_no_boku:20170819125948j:plain

 

うーん。楽ですね。

 

とりあえず、ざっくりとした理解でも、ニューラルネットワークがとりあえず設計できて、いろいろと試行錯誤できるわけですからね。

 

文系で、数学がどちらかと言えば苦手だったオジサンが、人工知能を体験するには最高の環境ですよ。ニューラルネットワークコンソールは!

 

関連記事のカテゴリ(この一覧で使い方1から順番に読むのをおすすめします)

arakan-pgm-ai.hatenablog.com

 

前の記事

arakan-pgm-ai.hatenablog.com

 

f:id:arakan_no_boku:20170910161122j:plain