Bash on Ubuntu on WindowsでJupyter NotebookからTensorflowを実行する

[Jupyter Notebookでいじって学ぶTensorFlow - MNIST For ML Beginners](http://qiita.com/oimou/items/4a4258a7f7cc2bd70afe)をよんで、windowsでもJupyter NotebookをつかってTensotflowを実行できる環境が欲しくなったので、構築してみました。

# pyenvのインストール
Bash on Ubuntu on Windowsにはデフォルトでもpythonが入っていますが、Anacondaを
使いたかったので、pyenvをインストールしました。

```
$ sudo aptitude install git
$ git clone https://github.com/yyuu/pyenv ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
```

# Anacondaのインストール
pyenvのインストールが終わったら、

```
$ pyenv install --list
```
してAnacondaの最新のバージョンを探します。この記事を書いた時点では3-4.2.0が最新だった
ので、3-4.2.0をインストールしてデフォルトの設定にしました。

```
$ pyenv install anaconda3-4.2.0
$ pyenv global anaconda3-4.2.0
$ pyenv rehash
```

# X11 GUI環境の整備

[参考記事[2]](http://qiita.com/makky0620/items/e31edc90f22340d791ff)を参考にしてX11 GUI アプリケーションを使える環境を整えます。

windowsには以下のアプリケーションをダウンロードしてインストールします。
* Xming-6-9-0-31-setup.exe
* Xming-fonts-7-7-0-10-setup.exe

そのあとにBash on Ubuntu on Windowsで以下のコマンドでX11を入れて、DISPLAYの設定も.bashrcに書きます。

```
$ sudo aptitude install x11-apps
$ echo 'export DISPLAY=localhost:0.0' >> ~/.bashrc
$ source ~/.bashrc
```
最後にxclockを表示させて動作を確認します。

```
$ xclock
```

# matplotlibのインストール

jupyterでグラフを表示させるためにはmatplotlibが必要なので、その準備をします。

```
sudo aptitude install libqtgui4
conda install matplotlib
```
また次のコードで使うnumpyがmkl対応になっていて、エラーになるので、
nomklのものに入れ替えます。

```
conda install nomkl
conda update --all
```

この状態で以下のコードを実行すると、sinカーブの画像が作られることを確認します。

```py:sin_plot.py
import matplotlib
matplotlib.use('Agg')

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y  = np.sin(x)
plt.plot(x, y)
plt.savefig('sin_curve.png')
```

# jupyterのインストール
Bash on Ubuntu on Windowsではlibzmq3周りでエラーになるので、それに対応したlibzmq3をインストールします。

```
$ sudo add-apt-repository ppa:aseering/wsl
$ sudo aptitude update
$ sudo aptitude install libzmq3
$ conda install -c jzuhone zeromq=4.1.dev0
$ conda install jupyter
```

最後に以下のコマンドを実行すれば、Jupyterが立ち上がり、http://localhost:8888/
で接続してpythonを実行できるようになります。

```
jupyter notebook --no-browser
```

先ほどのmatplotlibのグラフをjupyterのnotebookでインラインで表示させたい
場合は以下のように書くことでjupyterのnotebookに表示できます。

```
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y  = np.sin(x)
plt.plot(x, y)
```
![sin_curve.PNG](https://qiita-image-store.s3.amazonaws.com/0/60761/198eaf26-d748-c60e-bab4-741b1b203914.png)
# Tensorflowのインストール
[参考記事[1]](http://qiita.com/makky0620/items/e31edc90f22340d791ff)を参考にしてanaconda
の環境にTensorflowをいれます。

```
conda install -c conda-forge tensorflow
```
最後にJupyterのNotebook上で、https://www.tensorflow.org/get_started/
にあるコードを張り付けて実行すると結果が返ってくるので、
Tensorflowがインストールできていることが確認できます。

![tensor_flow_tutorial.PNG](https://qiita-image-store.s3.amazonaws.com/0/60761/b5e0d2ec-e17d-fad2-d6c1-83c569d84573.png)
# 参考記事
以下の記事を参考にさせて頂きました。ありがとうございます。
1.[Bash on Ubuntu on WindowsでTensorFlowを使うためのメモ](http://qiita.com/toyolab/items/bccd03d4cb7795112ab6)
2.[Bash on Ubuntu on Windows + XmingによるGUI](http://qiita.com/makky0620/items/e31edc90f22340d791ff)
3.[Cygwin絶対殺すマン ～物理のオタクがWindows Subsystem for Linuxで数値計算できるようになるまで～](http://qiita.com/PikkamanV/items/d308927c395d6e687a6a)
4.[Jupyter Notebookでいじって学ぶTensorFlow - MNIST For ML Beginners](http://qiita.com/oimou/items/4a4258a7f7cc2bd70afe)