ニューラルネットワーク自動生成アプリ(Google Colaboratory)

# はじめに
今回は、一切プログラムやコマンドを書かずに、機械学習プログラムを作成するCGIアプリを作成してみました。

[Make NN model](http://takemoto08.bio.kyutech.ac.jp/~hirano/Make_NN_model/)
（学生時代の研究室サーバに立てているので動かなくなってるかも）

<img width="600" alt="スクリーンショット 2018-07-08 17.24.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/247972/77304f8b-9d36-753f-c5f9-4feca59a5035.png">

この記事は、とりあえず動かしてみたいという方向けに書いているので、ニューラルネットワークの説明はありません。

また、Google Colaboratoryと呼ばれるものを使うので、どんなパソコンの環境でも行うことができます。

# Google Colaboratoryについて
簡単に説明すると、機械学習（プログラミング）を行うことができるWebページのようなものです。

![colab_basic.png](https://qiita-image-store.s3.amazonaws.com/0/247972/fbc4ae2b-1906-4572-cfc8-9d2a5fc81866.png)
引用：[Google Colabの知っておくべき使い方 – Google Colaboratoryのメリット・デメリットや基本操作のまとめ](https://www.codexa.net/how-to-use-google-colaboratory/)


以下のような特徴が上げられます。

- GPU(機械学習の計算を速く行うためのもの)を無料で使える

- 環境構築（面倒なソフトウェアのインストール）が簡単

今回はそこまで時間がかかる計算ではないので、GPUは使用しません。

詳しいことは既に他の方が紹介されているので割愛します。

[【秒速で無料GPUを使う】TensorfFow/Keras/PyTorch/Chainer環境構築 on Colaboratory](https://qiita.com/tomo_makes/items/f70fe48c428d3a61e131)

# セットアップ
Google Colaboratoryの準備を行います。

Googleアカウントを持っていることを前提に、まずは、[Googleドライブ](https://drive.google.com/)を開いてください。

マイドライブで、`右クリック -> その他 -> アプリを追加`と進んでください。

開いた画面で、`colabolatory`と検索し`接続`をクリックしてください。

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

マイドライブに戻り、`右クリック -> その他 -> Colaboratory`と進んでください。

開いた画面で、`ランタイム -> ランタイムのタイプを変更`と進み、ランタイムのタイプを`Python3`に変更し`保存`してください。

以上で終了です。

# プログラムの自動生成
ニューラルネットワークのプログラム(データはiris)を自動生成するアプリを作っています。

[Make NN model](http://takemoto08.bio.kyutech.ac.jp/~hirano/PyTorch-GUI/index.html)

こちらで、`エポック数(epoch)`、`学習率(learning rate)`、`層１のニューロン数(Layer1 neurons)`、`層２のニューロン数(Layer2 neurons)`、`活性化関数の有無（ReLU）`を指定するだけです。

`送信`を押して表示されたプログラムを使います。

とりあえず、以下のような条件で95%以上の精度が出ました。

- epoch : 3000
- learning rete : 0.01
- Layer1 neurons : 10
- Layer1's ReLU : チェック
- Layer2 neurons : 8
- Layer2's ReLU : チェック

プログラムの詳細を知りたい方は、[こちら](http://takemoto08.bio.kyutech.ac.jp/~hirano/PyTorch-GUI/details.html)をご覧ください。

# 実行
では、実行するためにGoogle colabにコピペしていきましょう。

最初に、フレームワーク(PyTorch0.4.0)をインストールします。

以下のプログラムをGoogle colabにコピペして、`Shift　+ Enter`を押してください。

```
from os import path
from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag
platform = '{}{}-{}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag())

accelerator = 'cu80' if path.exists('/opt/bin/nvidia-smi') else 'cpu'

!pip install -q http://download.pytorch.org/whl/{accelerator}/torch-0.4.0-{platform}-linux_x86_64.whl torchvision
import torch
print(torch.__version__)
print(torch.cuda.is_available())
```

`False`と出力されればOKです。（GPUを使わないという意味です。）

そして、`Make NN model`で作成したプログラムをコピペして、`Shift　+ Enter`を押してください。

すると、精度がでます。

<img width="798" alt="スクリーンショット 2018-07-08 0.33.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/247972/c4c9b9b5-d2cc-5335-ca74-cde5d147ac66.png">

<img width="521" alt="スクリーンショット 2018-07-08 0.34.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/247972/0476520a-9312-d8cb-c181-284683ea5ecd.png">

# 最後に
この記事の目的はCGIを使ったアプリ作りが目的でした。

その過程でGoogle colabという面白いものを見つけたので、使ってみました。

以後、アプリは他のモデルのプログラムも自動生成できるようにしていければいいなと思っています。

# 参考
[【秒速で無料GPUを使う】TensorfFow/Keras/PyTorch/Chainer環境構築 on Colaboratory](https://qiita.com/tomo_makes/items/f70fe48c428d3a61e131)
[PyTorchでシンプルな多層ニューラルネットワークを作ろう]()