Neural Network Consoleを使ってみた

# 1. はじめに
## 1.1 **Neural Network Console(NNC)ってなんぞや？**
Neural Network Consoleとは、皆さんご存じ**Sony**が発表したディープラーニングの統合開発ソフトウェアです。
コーディング一切なし！[Scratch](https://scratch.mit.edu/)のような直感的なブロック配置で簡単にニューラルネットワークを構築できる、最高のソフトウェアとなっています。ちなみに**無料**です。
と、いうことは......
Pythonなどのプログラミング言語を学んでいない人でも**気軽にディープラーニングを実装できる**んです！
凄くないですか......
今回はそんな神ソフト「Neural Network Console」について簡単に触れていこうと思います。

# 2. とりあえず使ってみる
## 2.1 セットアップ
早速使ってみましょう。実はこのNNC、クラウド版とWindows版(2022年8月時点)の2つが選べますが、クラウド版は10時間のみ無料で、その後は有料となってしまうのでWindows版をオススメします。
[こちら](https://dl.sony.com/ja/app/)からダウンロードしましょう。
下図のような表示があるので、ご自分のOSに合わせて**ダウンロード**を押してください。![installer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1472510/23c35027-1860-84dd-d584-a4d4e7c2a6da.png)
少し待つと、neural_network_console_○○○.exeというファイルがダウンロードされます。
これは圧縮ファイルになっているので、実行すると解凍ウィンドウが出てくると思います。好きな場所に解凍(Extract)しましょう。
僕はCドライブ直下に解凍しました。
解凍が終わると、指定したディレクトリに下図のようなファイル群ができているはずです。![スクリーンショット (166).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1472510/0aeb4a33-29bd-a51c-ca01-876ec7d920f5.png)
ここまででNNCのインストールは終わりです。

## 2.2 アクティベート
解凍したファイル群の中にある、**neural_network_console.exe**をダブルクリックして実行します。
下図のような警告(warning)ウィンドウが立ち上がると思いますが、OKを押してください。
![スクリーンショット (167).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1472510/b79b5da7-ff6c-96a9-1207-9c22b80907e7.png)
その後、アカウント作成とログインを行います。SonyかGoogleのお好きなアカウントでどうぞ。
![スクリーンショット (168).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1472510/ee36472e-a2c6-d3ef-0cdc-eb3528d2378c.png)
ここまでうまくできていれば契約条件の画面が表示されると思うので、確認後、**同意**を選択してください。
同意する/同意しないの下にあるチェック項目はどちらでも問題ありません。利用状況の収集と送信に同意するのであれば、チェックして(デフォルトのまま)適用を押しましょう。
また、お使いのコンピュータで**NVIDIA製、Keplerアーキテクチャ以降のCUDA対応GPU**をお使いの場合は、インストール時に解凍後にできたファイル群の中の**manual**を参考にセットアップしてみましょう。学習速度が向上します。(僕のPCでは使っていないのでスキップしました)

これでNNCが使えるようになりました。

# 3. チュートリアル
NNCには、既にサンプルプロジェクトが用意されています。
今回はそのサンプルプロジェクトを使って、**手書き数字MNIST**を使ったチュートリアルを行います。
## 3.1 NNCを起動する
neural_network_console.exeをダブルクリックして実行します。
## 3.2 サンプルプロジェクトを開く
起動後、プロジェクト画面が表示されると思います。
そのプロジェクト一覧から、**01_logistic_regression.sdcproj**を選択して開きましょう。
![スクリーンショット (169).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1472510/04eed555-85dd-a7ce-1599-2a7aea531ebd.png)
開けたら、**編集タブ**で、下図のような画面になっていることを確認します。
ちなみにこのブロック図は、MNISTのモノクロ手書き文字画像(4と9)を、9かどうかの2値判別を行うための1層ネットワークを表しています。
![スクリーンショット (171).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1472510/6755f02f-4d80-c1a6-0cd0-7e0c2a1afde3.png)
次に、**データセットタブ**で、学習用・評価用の画像データが読み込まれているか確認します。
![スクリーンショット (172).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1472510/4b736108-a0df-5b9c-7204-29f32829150e.png)
## 3.3 学習
**編集タブ**に戻り、右上の青い"**実行**"ボタンをクリック(F5でも実行可)し、学習を開始します。
**学習タブ**に行くと、学習の進捗状況を学習曲線と共に見ることができます。何気にこれが一番楽しいかも。
![スクリーンショット (175).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1472510/566135e5-18f4-b241-7cea-47dd6ef240be.png)
## 3.4 評価
**学習タブ**にて、右上の"**実行**"ボタンをクリック(F6でも実行可)し、評価を開始します。
**評価タブ**で、評価の進捗状況と評価結果を見ることができます。
ここでは評価結果として、評価用データセットに、学習したニューラルネットワークによる推定結果が追加された表が表示されます。
このチュートリアルにおけるy'は、yが1である(入力画像が9である)確率を示します。

**混同行列**をクリックして、精度評価結果を表示しましょう。
![スクリーンショット (174).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1472510/29d54c86-8fe0-ff26-7533-30d0ce30ab7b.png)
"Accuracy"が分類精度を示します。今回は評価データセットの"4"と"9"を95.2%の精度で分類できています。

# 4. まとめ
今回は、NNCのセットアップと1層ニューラルネットワークでのMNISTの認識のやり方をまとめてみました。
2層以上で試したい方は、**manual**を参考に進めてみてください。

NNCを使うことで、膨大な量のデータを短時間で学習・評価できることがわかりました。
コーディングなしでここまでできるという優れものですが、知識の乏しい僕にとっては、各層の計算方法が記載されていないので、M5Stackやラズパイなどのマイコンで実装するのは難しそうです。勉強あるのみ！

ちなみに今更ですが、この記事にまとめてあることはほとんどmanualにも載っているので、くれぐれもmanualは大切に。