Chainer 環境設定からサンプルプログラムの実行まで (Mac)

# この記事について
Mac に [Chainer](http://chainer.org/) をインストールし、MNISTのサンプルプログラムをSpyderで動かすまでの手順です。

# 動作確認環境
macOS Sierra

# 準備
## Homebrew のインストール
まずは [Homebrew](https://brew.sh/index_ja.html)をインストールします。
Homebrew は Mac 向けのパッケージ管理システムで、Macで開発をするのであれば、ほぼ必須です。
DBMSやApacheなど諸々、基本的にHomebrewからインストールすることをおすすめします。

Mac で Terminal を起動し、以下を打ち込む事でインストールが完了します。

Command Line Tools for Xcodeのインストール

```:準備
$ xcode-select --install
```

```:インストール
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

```:確認
$ brew doctor
```

## Anacondaのインストール
### 事前準備（pyenv, virtual-envのインストール）
pyenvはpythonのに関する設定（pythonのバージョンやライブラリを仮想環境にインストールして切り替えて使うためのライブラリです。
Pythonを使用した開発は、基本的に仮想環境を作った上でライブラリのインストールなど環境構築を行います。

```
$ brew install pyenv
$ brew install pyenv-virtualenv
```

```:~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
    export PATH="${PYENV_ROOT}/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
fi
```

```:設定の適用
$ source ~/.bashrc
```

```:確認
$ pyenv -v
```

## Anaconda本体のインストール

```:インストールできる環境一覧確認
$ pyenv install --list | grep anaconda
```

`anaconda-x.x.x` が Python2系、 `anaconda3-x.x.x` がPython3系です。
今回はPython2系をインストールします。

```:インストール
$ pyenv install anaconda-4.0.0
```

構築した環境を確認します。

```:確認
$ pyenv versions
```

環境を構築しただけでは、使えないので、その環境を使うように設定します。

```:設定
$ pyenv global anaconda-4.0.0
```

systemから、anaconda-4.0.0に切り替わっています。

```:確認
$ pyenv versions
  system
* anaconda-4.0.0
```

ここまできたら、以後pyenvを直接触る必要は無くなり、anacondaだけを意識すればよくなります。

# Anaconda での開発環境構築

まず、今ある仮想環境を確認してみます。

```
$ conda info -e
```

環境はroot担っていると思います。
ここに新しく、**dslab** という名前の環境を作ります。

```
$ conda create -n dslab python=2.7 anaconda
$ conda info -e
```

dslabというのができていると思います。
dslabの環境を使うように、環境を切り替えます。

```
$ source activate dslab
```

ここまでで、Chainer導入のための環境が整いました。

# Chainer のインストール

前章で

```
$ source activate dslab
```

をした後、

```
$ conda list
```

と打ってみて下さい。

matplotlib や numpy, scipy, pands, scikit-learn, spyder, ipython, seaborn など、必要そうなものは予めすべて入っています。
この仮想環境dslab上にChainerをpipでインストールします。

```
$ pip install chainer
```

インストール完了です。
Spyderでサンプルプログラムを動かして、動作確認してみます。

以下の例では、 `/Users/<yourname>/Programming` という作業用ディレクトリを作成して作業します。

```
$ mkdir ~/Programming
$ cd ~/Programming
$ wget https://github.com/pfnet/chainer/archive/v1.22.0.tar.gz
$ tar xzf v1.22.0.tar.gz
$ spyder chainer-1.22.0/examples/mnist/train_mnist.py
```

ちなみに、wget で

```
(anaconda-4.0.0/envs/dslab) $ wget https://github.com/pfnet/chainer/archive/v1.22.0.tar.gz
-bash: wget: command not found
```

とエラーがでたら、

```
$ brew install wget
```

とすれば wget コマンドが使えるようになります。

# サンプルプログラムの実行
<img width="1324" alt="Screen Shot 2017-03-25 at 16.07.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/73881/f4819f59-34f7-d9f1-ef44-7ad239dfc669.png">

右向き三角（Runボタン）を押すと学習が実行されます。
total が 100% になると学習完了です。

# 学習結果の確認

train_mnist.py と同じディレクトリ内にある result ディレクトリ内の loss.png を開いてみます。

```
$ open ~/Programming/chainer-1.22.0/examples/mnist/result
```

![loss.png](https://qiita-image-store.s3.amazonaws.com/0/73881/05696e66-ecb3-5a12-a047-c03ce0df7ac8.png)


# おまけ
Spyder でコマンドライン引数を入力するには、
<img width="36" alt="Screen Shot 2017-03-25 at 16.12.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/73881/cb4bd31e-be48-718c-e87c-07a5bb132942.png">
を押します。

![Screen Shot 2017-03-25 at 16.13.25.png](https://qiita-image-store.s3.amazonaws.com/0/73881/1ce0ddd9-6324-a47b-38d2-15fc0acbb901.png)