ディープラーニングを理解するために環境を作ってみた

# 背景

## ディープラーニングとはなんぞやのとっかかりとしてまずは視覚的に見えるものを用意したい

# 所感

* 環境構築にめちゃめちゃ苦労した・・・参考サイト通りにうまいこと動かずいろんなサイトを巡っては振り出しの繰り返しでした
* エラーが出たらとにかくログをチェックそこからGitのREADMEを読む
* StackOverflowとQiitaはめちゃ助けられました

# 目的

* 下記サイトのブロック崩しを学習している様を視覚出来るようにする

https://elix-tech.github.io/ja/2016/06/29/dqn-ja.html

# 必要な物

* tensolflow
* keras
* OpenAI Gym

# 動作環境

* Mac(OS X El Capitan)


とにかく動かすという点に絞ってますので的はずれな事もしてる可能性大なので実施の際は自己責任でお願いします。

# Tensflowをインストール

*参考サイトを鵜呑みにコピペで進めると必ず後悔します！自身の環境を照らし合わせながら進めることを強く推奨します！*

## pythonをインストールする

* macは既にpythonが入っているので入ってなければ2系をインストールしてください
* 下記コマンドでバージョンを確認

``` bash
python --version
```

**要確認**

* OSがEl Capitanでコマンド実行時に下記のように表示されていたらHomebrewでPythonをインストールを実行してください。ちょっと下に手順を掲載しています。

``` bash
which python
/usr/bin/python
```

## PyPIをインストールする

* インストールされているか下記コマンドで確認

``` bash
pip -V
```

* なければ下記コマンドからインストールする

``` bash
curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
```

## TensolFlowをインストールする

**必ず目的にあったものをインストールしましょう**

* 今回は下記の要件でインストールします

1. CPU
2. Mac
3. Python2系

[要チェック](https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html#pip-installation
)

``` bash
sudo easy_install pip
sudo pip install --upgrade virtualenv

virtualenv --system-site-packages ~/tensorflow
```

* ~/tensorflowのディレクトリが出来ます

### Activateする

下記コマンドでactivateします

``` bash
source ~/tensorflow/bin/activate
```

[チュートリアルから動作を確認しましょう](https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html#test-the-tensorflow-installation)

* 終了するときは「deactivate」で終了します

## インストールが上手くいかない場合

## HomebrewでPythonをインストール

* 何度も躓いてやり直したので下記のhomebrewでPythonを入れたような気がするので下記も記録として残しておきます

### HomebrewでPythonをインストール

``` bash
brew update
brew install python 
pip install --upgrade pip setuptools
brew linkapps python
```

### Pythonのパスをシェルの設定に書いてあげる

``` bash
echo 'export PATH=/usr/local/bin:/usr/local/share/python:$PATH' >>~/.zshrc
source ~/.bash_profile
```

* 下記コマンドで確認

``` bash
which python
/usr/local/bin/python
```

* 「/usr/local/bin/python」が表示されていればオッケー

[Mac OS X El CapitanにTensorFlowをpipで入れるときの落とし穴](http://walkingmask.hatenablog.com/entry/2015/11/16/224638)

## TensorFlowインストールでハマったとこ

* 正直どこではまってるかわからん部分が多い（そもそもハマってるかどうかすら気づいてない・・・）
* Hello worldはすぐに出力できるけどMNISTとかでエラー出まくり
* エラーが出たときはインストールでミスってる可能性が大
* エラーが出たときはとにかくググるStackOverFlowあたりで同様の人がまあまあいる

### 一番ハマった部分

**ImportError: No module named contrib.ctc**

StackOverFlowにもあがってたけど自分の原因とは違うっぽい

http://stackoverflow.com/questions/39661433/keras-import-fails-no-module-named-contrib-ctc

このエラーはKerasインストールのフェーズでも苦しめられました


参考サイトのインストールメモをそのままにインストールしてたのが原因かもしれない。ドキュメントのインストール手引をしっかり読みましょう。

はっきりした原因は英語が翻訳できずふわっとした理解になりましたが要件にあった条件でインストールを何度もやり直すことで解消されました。


# Kerasをインストール

## apt-getを使えるようにする

* [finkのサイト](http://www.finkproject.org/download/srcdist.php)から自身のOSバージョンに合ったものをダウンロードして解答する
* 下記コマンドを実行する

``` bash
cd ~/Downloads/fink-0.39.2
./bootstrap
```

インストール中にいろいろ質問があうが基本デフォルトで問題なさそうです。時間はかなりかかります。

* finkをpath登録する

``` bash
/sw/bin/pathsetup.sh
```

* Terminalを再起動でapt-getが利用可能になります。

``` bash
#finkをアップデート
fink selfupdate-rsync
```

## Kerasをインストールする

参考リンク：[本家ドキュメント](https://keras.io/ja/)

* 下記コマンドを実行する

``` bash
sudo pip install scipy
sudo pip install scikit-learn
sudo pip install pyyaml
sudo apt-get install libhdf5-dev
sudo pip install h5py
sudo pip install keras
```

libhdf5-devが見つからずインストールできなかったのでスキップしました。いらない？

* Pythonを起動してKerasを呼んで見る

``` bash
python

import keras
```

とすると

``` bash
Use Using Theano backend
```

か

``` bash
Use Using TensorFlow backend
```

が出力されます

* Theanoと出力された場合（TensorFlowの場合でも確認はしてください）

* 下記ファイルを無ければ作成して編集する

``` bash
vi ~/.keras/keras.json
```

``` bash
{
    "image_dim_ordering": "th", 
    "epsilon": 1e-07, 
    "floatx": "float32", 
    "backend": "tensorflow"
}
```

* 上記のように編集します（これじゃないと次のOpenAIGｙｍでエラーがでます）

参考リンク：[バックエンドでTensorFlowを利用する](https://keras.io/ja/)


## Keras動作確認

[参考リンク](https://keras.io/ja/getting-started/sequential-model-guide/)

上記リンクを参考にいろいろ試して動作するか確認する

## Kerasインストールではまったとこ

* そもそもTensolFlowのインストールの時点で間違っていることに気づかず進めたので地獄を見た
* contrib.ctc絡みのエラー頻発
* Kerasってなんぞやの状態で構築をしたのが最大の間違いかもしれない
* 上記理由で構築中でも何をしてるか自分の立ち位置がわからず

## contrib.ctcが憎い

* TensorFlowのインストールでもそうでしたが構築中に何度もこのエラーに頭を悩まされました
* 上手く行って次進められると思ったらあらわれます
* [StackOverFlowでも似たような質問](https://github.com/fchollet/keras/pull/3827/commits/5ea4afe0d1b9d072e1cb793a277cc4037417b11a)があって試してみたけどダメだった（この件に関してはTensorFlowのインストールがミスってる可能性大）

# OepnAIGymをインストール

* これがインストールできれば終わりも近いです

## OpenGymをインストール

``` bash
git clone https://github.com/openai/gym
cd gym
pip install -e .
```

* とりあえずミニマムインストール

* [公式サイトのチュートリアル](https://gym.openai.com/docs)の「Running an environment」のソースをコピペ実行して動作するか確認する

## 必要なものをインストールしていく

* インストール自体は完了ですがこれでは目的のブツは動きません

### Scikit-Imageをインストール

* 画像描画処理に関するアルゴリズムを集めたライブラリだそうです。下記コマンド実行でインストール

``` bash
sudo pip install scikit-image
```

参考リンク：http://nonbiri-tereka.hatenablog.com/entry/2014/11/27/102156

### matplotlibをインストール

* 実行時にmatplotlibがないとぐずってたのでこれもインストール
* グラフ描画のライブラリっぽい。多分実行後のグラフを出力するのに利用されるっぽいたぶん


``` bash 
pip install matplotlib
```

### pip install gym[all]する

* 最後にハマった場所。コマンド打っても「atari」で毎回コケるしStackOverFlowにも解決方法載ってない（糸口はあったけど）

[このサイト](http://qiita.com/masataka46/items/227fbfbda98a901f6720)で原因はわかったけどそもそもインストールでコケる・・・

* よくよく見たらGitHubに書いてたオチ

[GitHub](https://github.com/openai/gym)で「atari」を調べてみた

    The Atari environments are a variety of Atari video games. 
    If you didn't do     
    the full install, you can install dependencies via 
    pip install -e '.[atari]' 
    (you'll need cmake installed) and then get started as follow:

* cmakeインストールが必要やでってことでインストールします

``` bash
brew install cmake
```

参考リンク：http://a244.hateblo.jp/entry/2016/09/05/063000#CMake

* 再度OpenAIGymをインストール

``` bash
pip instal gym[all]
```

これが通れば後は実行するだけ

# ピンポールゲームを起動

## ソースファイルを取得

``` bash
git clone https://github.com/elix-tech/dqn
cd dqn
python dqn.py
```

* ゲームが起動して強化学習が始まります
* dqn.pyファイルを編集することで学習内容をチューニングすることができます。

![スクリーンショット 2016-11-25 11.51.06.png](https://qiita-image-store.s3.amazonaws.com/0/141648/f896bff6-fe8a-4ed8-8668-fe014a297ca8.png)


## 起動時にエラーが出る場合

* エラーをよく確認しましょう。あれこれインストールしてって表示されるので言われるがまま足りないものをインストールしていきましょう。
* 以上で完了ですお疲れ様です

# 導入時に参考になったサイトのリンク集
https://github.com/fchollet/keras/pull/3436#issuecomment-240230596
http://stackoverflow.com/questions/39848466/tensorflow-keras-convolution2d-valueerror-filter-must-not-be-larger-than-t
http://tjo.hatenablog.com/entry/2016/06/09/190000
https://elix-tech.github.io/ja/2016/06/29/dqn-ja.html
https://keras.io/#getting-started-30-seconds-to-keras
http://tjo.hatenablog.com/entry/2016/06/09/190000
https://gym.openai.com/
http://qiita.com/masataka46/items/f64ce9c110113ab8e517
http://nonbiri-tereka.hatenablog.com/entry/2014/11/27/102156
https://github.com/fchollet/keras/pull/3827/commits/5ea4afe0d1b9d072e1cb793a277cc4037417b11a
https://github.com/fchollet/keras/pull/3436#issuecomment-240230596
https://keras.io/getting-started/sequential-model-guide/
http://qiita.com/bohemian916/items/4f0736dcea932a162d9e
https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html#pip-installation
https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html#test-the-tensorflow-installation
http://walkingmask.hatenablog.com/entry/2015/11/16/224638
http://qiita.com/shngt/items/0d9a5ea47dddd97fcd27
https://keras.io/ja/
http://pythondatascience.plavox.info/python%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/anaconda-ubuntu-linux/
http://kk6.hateblo.jp/entry/20110815/1313405197
http://qiita.com/yu-sa/items/351969b281f3aea5e03d
http://qiita.com/como1559/items/feac9bacbbf362817c66
http://qiita.com/masataka46/items/227fbfbda98a901f6720
http://qiita.com/masataka46/items/227fbfbda98a901f6720
http://a244.hateblo.jp/entry/2016/09/05/063000#CMake
http://stackoverflow.com/questions/39848466/tensorflow-keras-convolution2d-valueerror-filter-must-not-be-larger-than-t