プログラミング上達したい人が書くブログ

プログラミング上達したい人が書くブログ

主に、アニメやPython、C++、競技プログラミング(初心者)について書きたいです。また、1週間に一つの記事を心掛けています。学生です。備忘録と書かれたものは他人に見せることを考えて書いてないため見にくいです。

Neural Network Consoleを使ってみた Part1

はじめに

 このページは、ニューラルネットワークについて無知な私が、「ニューラルネットワークコンソールを使えば効率的な学習ができる」という謳い文句に誘われて、ニューラルネットワークについてこのIDE(統合開発環境)を使って学んでいこうとするページです。

ニューラルネットワークって?

www.slideshare.net

私は上記のスライドで簡単な部分は学びました。

ニューラルネットワークコンソールって?

 説明されている公式サイトは以下のようになります。

www.sonynetwork.co.jp

 上記サイトの内容をまとめると、「このIDEは、GUI的な操作でニューラルネットワークの設計ができるんだ」ということです。

 ちなみに配布サイトは以下のリンクに貼っておきます。

dl.sony.com

このページではなにをするのか?

 とりあえず0-9までの文字を判定していこうと思います。

はじめに読んでおくべきこと

blog.dl.sony.com

上記リンクのチュートリアルは読んでおくべきです。これは、サンプルプログラムを実行するまでの一連の流れが書いてあり便利です(初心者感)。また、上記リンクのサイトには簡単な使い方が書かれたページもあり、初めての方はとても便利です。

 

作った設計図

f:id:sachishimei:20170901201416p:plain

 設計図は上図になります。Inputに使うDatasetは、ニューラルネットワークコンソールをインストールしたときに付属しているmnist_training.csvを使っています。また、評価用のデータには、mnist_test.csvを使っています。

 Affineとは、リファレンスから引用させてもらうと、

全ての入力値から、OutShapeプロパティで指定する全ての出力ニューロンへの結合を持つ全結合層です。

 

o = Wi+b

(iは入力、oは出力、Wは重み、bはバイアス項を示す)

といったことが書かれています。OutShapeプロパティとは、出力ニューロン数のことです。つまり、ニューラルネットワークでいう隠れ層の第1層目であるということです。

 Softmaxとは、Activationレイヤーと言われ、いわゆる活性化関数の1種です。これもまた、引用させてもらうと、

入力値のSoftmax値を出力します。カテゴリ分類問題における確率など、0.0~1.0かつ合計が1.0となる出力値を得たい場合に使用します。

 

ox=exp(ix) / Σ_jexp(ij)

(oは出力、iは入力、xはデータのIndexを示す)

と書かれています。私も詳しい理論はわかりませんが、カテゴリ分類問題に使うことができると書かれているためこれを用いさせてもらいました。

 CategoricalEntropyとは、ロスレイヤーと言われ、いわゆる出力層です。これは、正解データとの相互情報量を最小化する機能を持っています。

 

トレーニングしてみた結果

結果は以下のようになりました。なるほどわからん。とりあえずエラー(赤い線)とコスト(青い線)の値が右に進むごとに減っていればよいということですが、なぜかVALIDATION ERROR(赤い点線)が増えていて成功してるのか不明です。

f:id:sachishimei:20170902112444p:plain

評価用データを用いて成功率を見てみた。

以下の画像のAccuracyが、成功率を表しています。これによると、約92%のデータがうまく分類できているようです。これは、成功していると言っていいのでは?

f:id:sachishimei:20170902113323p:plain

これからのこと

 とりあえずどうやったら成功率が上がるのかを確かめてみようと思います。また、これはPythonソースコードで受け取れるのかもわかりませんし、そこも知りたいです。

 もっとニューラルネットワークコンソールをいじってみたいのですが、テストデータしかないためなかなかできません。だれか、そういうテストデータとして使えるようなサイトを知りませんか?例えば、リンゴの画像データをまとめてダウンロードできるようなサイトです。知っていたら、コメントしていただけると助かります。