Windows上にディープラーニング環境を構築するまで

#概要
Windows上にディープラーニング環境を構築する際、ネット上の情報を組み合わせる必要があったので、ここにまとめておく

環境
・OS：Windows7 64bit
・言語：Python
・Python環境：Anaconda、Spyder
・ディープラーニング環境：Tensorflow, Keras

AnacondaはPythonを使う上で便利ものをパッケージとしてダウンロードできるくらいに覚えてる。
SpyderはAnacondaをインストールすると一緒についてくるPythonのエディタ（Visual StudioやXcode、Eclipseみたいなもの）

TensorflowはGoogleが提供しているPython上で動くディープラーニング環境で、Kerasはそれを便利に使えるようにするライブラリ群みたいなもの。終盤で紹介する。

#Anacondaのインストール
2017/5/6現在、TensorflowはPython3.5にしか対応していない。Anaconda4.3はPython3.6をインストールしてしまうので、敢えてAnaconda4.2をインストールする必要がある。

以下のリンク、もしくは「Anaconda old archives」とかで調べて出てきたページから、Anaconda3-4.2.0-Windows-x86_64.exeをダウンロードする。（Anaconda2ではないので注意)
https://repo.continuum.io/archive/

ダウンロードしたexeをダブルクリックするとインストールが始まる。基本的には「I agree」もしくは「Next」を押していけば問題ないが、以下に少し注意を記載しておく。

AnacondaのDestination Folderは日本語を含まないパス以下に置くのがベター。試しに日本語のフォルダ下に作成したら、Spyderが動作しなかった。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/175647/1782186f-73cc-d386-d807-f54d11272234.png)
(ユーザ名は隠してます)

Python3.5であることを確かめる。

![無題2.png](https://qiita-image-store.s3.amazonaws.com/0/175647/19650513-be18-e0f1-a7a8-ea33e1ec7d26.png)

インストールが終了すると、Anaconda Cloud、Anaconda Navigator、Anaconda Prompt、Spyderなどがインストールされる。筆者はAnaconda PromptとSpyderしか使っていない。 

#Spyderの起動

インストールされたSpyderを起動すると、以下のような画面になる。左側のエディタにPythonコードを書いて「F5」で実行すると、Pythonが実行される。実行結果は右下のコンソールに出力される。
右下のコンソールに直接コードを打ち込んでも実行は可能。

![無題3.png](https://qiita-image-store.s3.amazonaws.com/0/175647/ad466de3-dcd6-a650-2d1f-e80bac21ff6c.png)


#Tensorflowのインストール
TensorflowをPythonコードで使用するには、Spyderのエディタに以下のようにimport文を書く。
`import tensorflow as tf`

もちろんだが、これはtensorflowがインストールされていないと実行エラーとなる。そのため、Anaconda promptを使って、tensorflowをインストールする。

Anaconda Promptを起動する。（ユーザ名は隠してます）

![無題4.png](https://qiita-image-store.s3.amazonaws.com/0/175647/89dc1c2c-ecc9-6453-f144-4a25f6f8b763.png)

`pip install tensorflow`
を入力する。
(GPUでtensorflowを動かしたい場合は後述のメモを参照)

![無題5.png](https://qiita-image-store.s3.amazonaws.com/0/175647/28386741-04b5-c9e9-8e2f-1df844479185.png)

こんな感じでインストールが進む

![無題6.png](https://qiita-image-store.s3.amazonaws.com/0/175647/878fd903-7b95-a48d-381c-d8733c9a14f4.png)

最後にSuccessfully installedというメッセージが出てきたらインストール成功。Anaconda Promptは閉じて良い。

#GPUでtensorflowを動かす場合（メモ）
もし、GPUでtensorflowを動かしたいのであれば、Anaconda Promptにて、
`pip install tensorflow-gpu`
と入力するが、GPUでtensorflowを動かすには、GPUのバージョンがあったり、CUDAやCuDNNをインストールしたりして結構大変。
CUDAのインストールは以下が参考になる。
http://qiita.com/binzume/items/7a0170fe834e250ddef9

筆者はGPU環境の構築も行ったが、CUDAのインストール時に警告が出て（警告の内容は忘れてしまった。たしか、ドライバのバージョンがなんたらかんたら）、結構躓いた。メモ程度にしか書かないが、GPUドライバがCUDAにも含まれていて、現在インストールのドライバよりCUDAのドライバが古いからやべーよって事だったと思う。CUDAのインストールを進めていくと、ドライバのインストールが選択できるから、そのチェックをはずせばインストールできた。

#Tensorflowを動かしてみる。
TensorflowのチュートリアルとしてMNISTが有名だが、画像認識などをやったことがない人にはハードルが高いと思う。

以下のサイトなどは回帰をtensorflowでやっているので、おすすめ。
http://qiita.com/TomokIshii/items/f355d8e87d23ee8e0c7a

（以下上記のサイトより引用）

```
import numpy as np
import tensorflow as tf

trX = np.linspace(-1, 1, 101)
trY = 2 * trX + 3 + np.random.randn(*trX.shape) * 0.33

def lin_model(X, w, b):
    return X * w + b

w = tf.Variable([0.])
b = tf.Variable([0.])

x = tf.placeholder(tf.float32, shape=(101))
y = tf.placeholder(tf.float32, shape=(101))
y_hypo = lin_model(x, w, b)

cost = tf.reduce_mean(tf.square(y_hypo - y))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

# Initializing
init = tf.initialize_all_variables()

# Train
with tf.Session() as sess:
    sess.run(init)

    for i in range(1001):
        sess.run(train_step, feed_dict={x: trX, y: trY})
        if i % 100 == 0:
            print("%5d:(w,b)=(%10.4f, %10.4f)" % (i, sess.run(w), sess.run(b)))
```

上記コードをSpyderに貼り付けて実行すれば、以下の画像のように動作する。printのみはPython3.5の仕様変更から()でくくるように変更した。

![無7.png](https://qiita-image-store.s3.amazonaws.com/0/175647/04c45d4d-8433-26dc-69c8-a394b8c2f1b1.png)

コードの解説をすると、

`y=ax+b`
という形があってaとbを求めようとしている。

`y=2x+3`の式に基づいて得られる以下のデータあったときに、
`trY = 2 * trX + 3 + np.random.randn(*trX.shape) * 0.33`
（np.random.randn(*trX.shape) * 0.33は雑音や誤差）

「a=2」と「b=3」を推定するという感じ。

コンソールを見ると、a=2,b=3が近似値として求められているのがわかる。

#Kerasの紹介
Tensorflowのチュートリアルをある程度やったら、実際のディープラーニングはKerasを使用してやった方が、初心者には便利だ。
Kerasのチュートリアルは以下の公式ホームページに日本語がある。
https://keras.io/ja/

Tensorflowをある程度理解できれば、すぐに理解できると思うので、ここでは詳細に書かないが、Tensorflowよりも直感的にコードが書ける。