"BOKU"のITな日常

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

サンプルプロジェクトを変更して、新しい名前で保存する/Neural Network Consoleの使い方

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

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

まったく新規につくるのは、次回のお楽しみにしておいて、今回は、既存のプロジェクトをもとに変更する方法をやってみます。 

f:id:arakan_no_boku:20190326212937j:plain

 2017/11/30追記

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

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

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

 

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

 

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

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

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

 

ただ、複雑なものに最初から手出しするのも非効率ですし、何よりCPUオンリーの環境では実行に時間がかかりすぎます。 

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

 

サンプルプロジェクトを開く

 

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

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

名前で、探して開いて下さい。

(バージョン1.3でも同じ名前です)

f:id:arakan_no_boku:20170819120850j:plain

 

変更する前に別名でプロジェクトを保存する

 

開いたら、まず「名前をつけて保存」で別名にして、ファイルを保存します。

f:id:arakan_no_boku:20190127214620j:plain

右上の赤枠のアイコン(マウスを上にもっていくと「save as」と表示されるのが名前をつけて保存のアイコン)で行います。

後でもよいのですが、うっかりで上書きとかすると元にもどせません。

元のサンプルプロジェクトをつぶさないために、このタイミングでやってきます。 

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

f:id:arakan_no_boku:20170819125725j:plain

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

f:id:arakan_no_boku:20170819125948j:plain

さて、別名で保存できたら、それを開いて作業続行です。

 

ちょっとだけ注意です

 

加工するプロジェクトは、Neural Network Consoleのインストールフォルダ以外に固定で決めておいて、そこに保存するようにした方が、バージョンアップの時に楽です。

Neural Network Consoleのインストールフォルダの下にワークフォルダを作っていると、バージョンアップ時に新しいバージョンのフォルダにコピーしてからでないと、古いバージョンが消せなくなるので、ちょっと面倒です。

 

レイヤーの英語名や役割の理解は後回しで

 

EDITタブを開くと、左側にレイヤーが一覧されてます。 

f:id:arakan_no_boku:20190127215054j:plain

この中から必要なものを選んでペタペタ貼り付けていくわけです。 

といっても。

難し気ですよね。

各レイヤーの英語名からどういう役割のレイヤーであるかを理解するには、ある程度、ニューラルネットワークの基本を理解していないと無理です。

でも、鶏と卵じゃないですけど、ここで、まずは勉強して、きちんと理解しないと・・なんて考えると、ハードルが高くなってしまって、前にすすめません。 

だから、とりあえず。

まず動かして遊んでみる。

遊びながら、わからない部分を都度勉強する。

こういうスタンスで良いんじゃないかと思います。 

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

 

畳み込み演算の層を挟み込んでCNNみたいにする

 

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

  • input
  • Affine
  • Sigmoid
  • BinaryCrossEntropy

 

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

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

 

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

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

2019/01/27追記

CNNに使う各レイヤーについての記事を以下に書きました。

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

arakan-pgm-ai.hatenablog.com

arakan-pgm-ai.hatenablog.com

 

レイヤーの追加・変更の方法

 

追加する層は、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%ですから、かなり大幅な向上です。 

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

 

うーん。楽ですね。 

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

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

 

2017/11/30追記

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

f:id:arakan_no_boku:20171130202351j:plain

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

 

カテゴリの一覧

arakan-pgm-ai.hatenablog.com

arakan-pgm-ai.hatenablog.com