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

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

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

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

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

なので、やってみます。

 

2017/11/30追記

>この記事の画面はWindows版のVersion1.00のものです。

>Version1.10で若干画面のアイコン等のデザインが変更になっています。

>しかし、操作に大きな影響ないため、そのままにしています。

>文末に比較用にVersion1.10の画面について、追記しています。

 

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

 

ベースにするサンプルプロジェクトを選ぶ

 

ベースのサンプルプロジェクトは、「01_logistic_regression.sdcproj」を使います。 

理由は一番シンプルだからです。 

サンプルには、興味深いものが他にもたくさんあります。 

例えば、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

 

うーん。楽ですね。 

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

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

 

2017/11/30追記

ニューラルネットワークコンソール Version1.10の画面の主な変更は、以下のアイコンのデザイン部分です。

f:id:arakan_no_boku:20171130202351j:plain

 

ただ、見たらわかる程度の変更だと思います。

 

次の記事

arakan-pgm-ai.hatenablog.com

 

ニューラルネットワークコンソールの記事一覧はこちらです。

arakan-pgm-ai.hatenablog.com

 

初めての方は、使い方1から順番に読んでいただくことをおすすめします。 

f:id:arakan_no_boku:20171115215731j:plain