Windows10(x64)ネイティブで機械学習の環境を構築する

# 目的
windows環境で機械学習を学ぶ

* 仮想環境化での環境構築は避けたい
* 無料
* 計算用のマシンではGPUをバックエンドに利用する
* Bash on Ubuntu on Windowsさえ使わない

最初はできる限りプレーンな環境が欲しいのです．

# 結果
* 実現できた
* 思った以上にたくさんのソフトウェア・ライブラリのインストールが必要だった
* 各種ソフトのバージョン依存にハマった

以下の環境で安定動作

| item | version |
|:--|--:|
| python | 3.5.3 |
| CUDA | 8.0 |
| cuDNN | 5.1 for 8.0|
| Visual Studio | community 2015 update1|


chainerのサンプル(chainer/examples/mnist/train_mnist.py)をそのまま使って処理時間のベンチマークとして比較．
デフォルトのまま20epoch回した際の経過時間(elapsed_time)を手持ちの環境で比較した．

| 用途 | 名称 | CPU | ベンチマーク |
|:--:|:--:|:--:|--:|
| モバイル | GODWIN | Atom Z8700 | 1.5h |
| ノート | Lenovo X250 | i5 | 15m |
| デスクトップ | 自作 | i5 | 15m |
| 〃 | GPU利用 | GT 730 | 3m |
| 〃 | GPU更新 | GTX 1080ti | 1m |

奮発して1080ti買ったものの，当面勉強用途なのでGT730で十分だった orz．
それと，出先でもGPUマシンをGUI操作できるGPDWINの存在がありがたい．

# python環境
## python
python 3.6系環境下ではtensorflow 1.01が動かなかった
公式サイトからDLした3.53(x64)で安定

その他の汎用的なライブラリは以下手順

```
> python -m pip install --upgrade pip
> python -m pip install --upgrade -I setuptools
> python -m pip install ipython
> python -m pip install numpy
> python -m pip install pandas
> python -m pip install matplotlib
```

# 機械学習ライブラリ
## tensorflow
得に苦労なし

```
> python -m pip install tensorflow
```
GPU強化したマシンでは

```
> python -m pip install tensorflow-gpu
```


## chainer
CPU動作させるぶんには特に苦労なし

```
> python -m pip install chainer
```

マシン別の処理性能比較のためにMNISTのサンプルを使ってみた．
こいつをGPUで動かすためはVSのインストールが必要となりハマる羽目に．

## sklearn
つまづいた．
numpy+mklとscipyが必要
オンラインでのpipインストールでは利用ができなかったのでそれぞれ.whlをダウンロード

[wheels](http://www.lfd.uci.edu/~gohlke/pythonlibs/)

```
> python -m pip install "numpy-1.12.1+mkl-cp35-cpm35-win_amd64.whl"
> python -m pip install "scipy-0.19.0-cp35-cp35m-win_amd64.whl"
> python -m pip install sklearn
```

sklearnはSVMのお試し実装に利用．

# GPUの利用
## CUDA
8.0がリリースされていたので使っている．
cuda_8.0.61_win10.exe

## cuDNN
ダウンロードするのにアカウントの作成が必要．
業務利用チックに利用目的申告してたらすぐアカウント発行してくれた．

v6.0 for CUDA 8.0が出てたがNG．
cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0 を利用．

実体は単なるCUDA経由で利用するDLLモジュールの様なので見えるところに置いておけばOK．
CUDAインストール時にパスを通してくれた
"\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0"
に入れておいた．

GPUを使ってtensorflowチュートリアルからmmist_with_sumaries.pyなど走らせてみると
"cupti64_80.dll"が見ないと怒られる事があるので
"\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0<font color='red'>\extras\CUPTI\libx64</font>"
にも追加でパスを通してあげなければならなかった．

# その他
##VisualStudio
chainerサンプルの動作にCUDAだかcuDNNだかからコンパイラを利用しに行くのでインストールした．
VS 2015 community update1で安定．

超ハマった．
2015 update2以降はCUDAから利用できない．
VS 2013 community で十分なのかも．
そもそもVS公式はすでに2017一色．過去バージョンへのリンクが見当たらない

[Visual Studio Community 2015 with update 1](http://download.microsoft.com/download/E/B/C/EBC9E8D9-DB4F-4BAC-9436-17356C2AA7A5/vs2015.1.com_jpn.iso) (.iso)


# サンプルのダウンロード

## Git
[github.io](https://git-for-windows.github.io/)からgit for windows 2.12.2(2)をDLして利用

### MNISTサンプル
```
> git clone https://github.com/tensorflow/tensorflow.git
> cd tensorflow\tensorflow\examples\tutorials\mnist
> python mnist_softmax.py
```
### chainerサンプル

```
> git clone https://github.com/pfnet/chainer.git
> cd chainer/examples/mnist/train_mnist.py
> python train_mnist.py
```

## octave
v4.2.1(x64)

お試しのベクトル・行列演算と結果の可視化に重宝．
Coursera Machine Learningを受講したら便利さを体感した．
動作原理の確認のためにわざわざコードなんて書いていられない．
MATLABの代わり．

v4.0.0は避けるように言われてる．