#はじめに
この記事は『Deep Learning初心者,プログラミング初心者だけどDeep Learningしてみたいな~でもやり方わからないしな~』といった人向けであります.
#動機
簡単にDeep Learningしたい.
C++とかPythonとかverilogとか,
ソフトウェアでもハードウェアでも実装してみましたけど,
設計からコーディングまで工程数が多いこと...
それが!なんと!!GUIでできる!!!とのこと.
SONYから提供されているNeural Network Console(NNC)!
これはやるしかない.やりましょう.
※2017年12月18日投稿時の話です.
#この記事の目的
NNCで(ある程度)任意のネットワークでMNISTデータセットの線形分類をできるようになる.
~その1~:インストール,とりあえず実行
~その2~:改造に挑戦
※MNISTデータセット:グレースケール手書き数字画像のデータセット.
1つの画像の大きさは縦横28*28ピクセル.
クラス数は10で学習用60000枚,テスト用10000枚(クラス毎に枚数は異なる).
クラス分類タスクの評価指標によく使われる.
#扱うNeural Network
~その1~:Multi-Lyaer Perceptron(MLP)
~その2~:Convolutional Neural Network(CNN)
#まずはNNCのインストール
今回はwindowsアプリ版を使います.
まずは公式HPにアクセス.
ここからインストール完了までの手順は3つ.
1.メールを送ってインストーラの入手
2.ダウンロード
3.解凍するだけ
悔しいことに簡単です.
※.zipで993MB,解凍して2.34GBとまぁまぁ重いのでインストールする場所を選びましょう.
##環境
自分の環境は次の通りです.
OS:Windows 10 Education 64bit
CPU:Intel Core i7-4771
メモリ:8GB
GPU:なし
#既存のNN(MLP)でやってみる
とりあえず,定番中の定番『MNISTをMLPで分類』をやってみます.
と,その前にセットアップですね.
##セットアップ(スクショ取り忘れました)
neural_network_console.exeを初めて開くとSetupウィンドウが表示されます.
GPUも積んでいないので,とりあえず規約を読んでapplyしてみる.
動きました.
※『Visual Studio 再頒布パッケージ2015がない』と言われた方はこちらから入手,インストールしてください.
##そもそもMLPとは?
Multi Layer Perceprtonの略です.
perceprton(パーセプトロン,神経細胞)があるlayer(層)をmulti(複数)並べたものです.
そのまんまですね.
こんな感じです.bは趣味で書いたので気にしないでください.
(入力データ,ラベル)←このセットで覚えさせます.
教師あり学習といいます.
理論について詳しくはまたいずれ...
深層学習に使われる多くのニューラルネットワークの”基本形”ですね.
##動かします
HOME->PROJECT->10_deep_mlp.sdcprojと移動します.
※この時点でMNISTデータセットのインストールを求められます.気持ちよく引き受けましょう.
するとグラフがぬるぬると描かれます.
これは楽ちん.
赤い実線が学習できているかを表します.点線は汎化能力を試すためのものです.
ここでは過学習という現象が起きていますが,本題とは関係ないのでスルーしましょう.
『4』と『9』...そうですか.
いや,この画面,なんぞや.
ここで,学習させたデータセットについてみてみましょう.
水色の丸のDATASETに移動します.
前述の通り,MLPは(入力データ,ラベル)のセットで学習させます.
ここでは(4or9の画像,0or1)になっています.紺色の枠と赤の枠ですね.
さて,ラベルですが,黄色の丸の縦ライン示す通り,
yが9じゃない(4)ならラベル0
yが9ならラベル1
ですね.
※0から9まで全部学習させているのかと思いきや,4と9の2つだけでした.ご愛敬.
実は『y'』が出力値なんですけど(先に言えよ)
index1の結果は『4の画像を入力したら0.00117776328698っていう値が出たからほぼ0だし分類的にはラベル0だと思います』ということですね.
一方で,
index3の結果は『9の画像を入力したら0.988236129284っていう値が出たからほぼ1だし分類的にはラベル1だと思います』ということですね.
ラベル0は4,ラベル1は9,と学習させたので...
えぇ,見事に分類できてますね.
とても簡単にDeepLearningできちゃいましたね.
さ!次は改造してみましょう.