Bash on Ubuntu on WindowsでTensorFlowを使うためのメモ

Windows 10 Anniversary Updateで、WindowsでUbuntuが使えるようになったということで、TensorFlowを入れてみました。

# 参考記事
以下の記事を参考にさせていただきました。

[1] [Bash on Ubuntu on Windowsをインストールしてみよう！](http://qiita.com/Aruneko/items/c79810b0b015bebf30bb)
[2] [CentOSにpyenvを利用してAnacondaをインストール](http://pppurple.hatenablog.com/entry/2016/05/07/211558)
[3] [TensorFlow Installation Using conda](https://www.tensorflow.org/versions/r0.10/get_started/os_setup.html#using-conda)
[4] [Bash on Ubuntu on Windows + XmingによるGUI](http://qiita.com/makky0620/items/e31edc90f22340d791ff)
[5] [Cygwin絶対殺すマン ～物理のオタクがWindows Subsystem for Linuxで数値計算できるようになるまで～](http://qiita.com/PikkamanV/items/d308927c395d6e687a6a)
[6] [Bash on Ubuntu on Windows とX Windowの組み合わせで日本語表示と日本語入力](http://tonop.cocolog-nifty.com/blog/2016/07/bash-on-ubuntu-.html)

# Bashインストール
[参考記事[1]](http://qiita.com/Aruneko/items/c79810b0b015bebf30bb)の通りです。

# Anacondaインストール

Ubuntu on Windowsにはpythonは入っているのですが、バージョンが２系で、パッケージの追加も必要ということなので、Anacondaを入れることにしました。ただし、元のpythonは残しておくため、[参考記事[2]](http://pppurple.hatenablog.com/entry/2016/05/07/211558)のようにpyenvを使ってインストールしてみました。以下、その手順です。

## Gitインストール
pyenvインストールのためにGitをインストールします。

````bash
$ sudo apt-get install git
````

## pyenvインストール
Gitを使ってpyenvをインストールします。

````bash
$ git clone https://github.com/yyuu/pyenv ~/.pyenv
````

## pyenvの設定
pyenvの環境設定を.bachrcに追加します。

````bash
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
````

## Anacondaインストール
source ~/.bashrcか、bash再起動して

````bash
$ pyenv install --list
````
でインストールできるAnacondaのバージョンを確認して

````bash
$ pyenv install anaconda3-4.1.0
````
でインストールします。

## Pythonの環境設定

````bash
$ pyenv global anaconda3-4.1.0
$ pyenv rehash
````
で、Pythonの環境をAnacondaに設定します。

# TensorFlowインストール

TensorFlowのインストール方法はいくつかありますが、Anacondaが入っているので、

````bash
$ conda install -c conda-forge tensorflow
````
でインストールします。ただし、これでインストールできるのは、CPU版のみです。

ここで、[TensorFlowのIntroduction](https://www.tensorflow.org/versions/r0.10/get_started/index.html)にあるサンプルプログラムをPythonで実行すると、

````
0 [ 0.82097143] [-0.14609614]
20 [ 0.30302274] [ 0.18841095]
40 [ 0.15555] [ 0.26946762]
60 [ 0.1151993] [ 0.29164591]
80 [ 0.10415875] [ 0.2977142]
100 [ 0.1011379] [ 0.29937458]
120 [ 0.10031134] [ 0.29982889]
140 [ 0.10008518] [ 0.29995319]
160 [ 0.10002329] [ 0.2999872]
180 [ 0.10000639] [ 0.2999965]
200 [ 0.10000175] [ 0.29999906]
````
と出るので、とりあえずTensorFlowインストールはOKなのでしょう。

# X11関連のインストール
BashだけだとGUIがないので、ついでにX11アプリが使えるようにします。手っ取り早いのは、[参考記事[4]](http://qiita.com/makky0620/items/e31edc90f22340d791ff)のように、[Xming](https://osdn.jp/projects/sfnet_xming/)を使う方法です。
（Xmingと同様なソフトとして[VcXsrv Windows X Server](https://sourceforge.net/projects/vcxsrv/)というのもあります。）

Xming、あるいはVcXsrvをインストール後、X11のアプリとライブラリをインストールします。
（インストールするのは、x11-appsでなくても構いません。xtermなどX11のアプリであれば、必要なライブラリがインストールされます。）

````bash
$ sudo apt-get install x11-apps
````

それから環境設定を.bashrcに追加します。

````bash
$ echo 'export DISPLAY=localhost:0.0' >> ~/.bashrc
````

これで、X11関連のアプリは動くはずですが、Pythonでmatplotlibを使ってグラフを表示させようとすると、

````
OMP: Error #100: Fatal system error detected.
OMP: System error #22: Invalid argument
````
というエラーが出て止まってしまいます。matplotlibに限った話ではないのでしょうが、MKLを利用するパッケージでエラーが出るそうで、

````bash
$ conda install nomkl
````
のように、各パッケージをMKL非対応版に変更する必要があるようです。

一応、これで自分の環境では、matplotlibでグラフを表示させることもできました。~~ただこのままでは、グラフ中の日本語表示はうまくできないようです。~~日本語入力は[参考記事[6]](http://tonop.cocolog-nifty.com/blog/2016/07/bash-on-ubuntu-.html)を参考にするとできます。それからmatplotlibグラフ中の日本語は、

````py
from matplotlib.font_manager import FontProperties
fp = FontProperties(fname='C:\Windows\Fonts\YuGothM.ttc', size=14)
````
のフォントのパスを

````py
from matplotlib.font_manager import FontProperties
fp = FontProperties(fname='/mnt/c/Windows/Fonts/YuGothM.ttc', size=14)
````

のように書けば、Bash上からも認識されます。