python/tensorflow初心者が、jupyter+tensorflow環境を構築してHello Worldする


## 概要

[Amazon.co.jp: TensorFlowはじめました　実践！最新Googleマシンラーニング (NextPublishing) 電子書籍: 有山 圭二: Kindleストア](http://amzn.to/2bZb6PF)

をやるにあたって、vimなどを操作しながらだと初心者には辛そうなので、jupyterというノート上で簡単に操作できるようする手順メモです。
(※といっても、途中でターミナル操作入るけどね！）

**jupyterイメージ画像**

![2016-09-10_14_58_35.png](https://qiita-image-store.s3.amazonaws.com/0/31824/85b31a53-ac2e-73a5-d7c3-790f1884afe1.png "2016-09-10_14_58_35.png")


[JupyterでTensorFlowが使えるDockerイメージ - めもめも](http://enakai00.hatenablog.com/entry/2016/03/28/131157)

というdockerを使った手段が一番手っ取り早いのですが、私のいつも利用してる macbook airは色々しょぼくてmac用dockerを利用すると乙るので、普通にインストールした…というのが背景です

以下簡単な流れです

* pythonをpyenvを使ってインストール
* jupyterをインストール(ブラウザ上で、tensorflowを実行・確認できる環境)
* tensorflowをインストール
* 簡単なjupyter環境上でのtensorfow Hello World!!

pyenvを便利にするpyenv-virtualenvまでやる手順がありますが、そこまで求めても仕方がないので省略します

## 前提条件・知識

* mac + gitがインストール済み
* ターミナル環境が多少操作できる

## python環境の準備

全ユーザ共通のsystem pythonを利用するのではなく、※※env系のpyenvをインストールします
（最近はrubyでもnodeでもこういった※※env系を使って環境を切り分けるのが一般的ですね）。

これで、他に影響を与える事無くTensorflowを動かす用の異なったバージョンのpython環境を作れます。


### anyenvを利用してpyenvをインストール

いつも**env系を複数利用しているので、それを一括で管理できるanyenvをインストールし、そこからpyenvをインストールしています（これは好みです。直接pyenv入れても問題ありません）。こうしている理由は、zshrc(or bashrc)が沢山のenv系の設定で汚くなるから…

#### anyenvインストール

以下のコマンドを入力しレポジトリをcloneします

```
git clone https://github.com/riywo/anyenv ~/.anyenv
```

後はシェルの起動時にanyenvを読み込むように、自分の環境に合わせてbashrcなどに以下の設定を追加します。

``` .bashrc
if [ -d $HOME/.anyenv ] ; then
    export PATH="$HOME/.anyenv/bin:$PATH"
    eval "$(anyenv init -)"
```

私のdotfilesではこのように設定してます
https://github.com/kegamin/prezto/blob/master/runcoms/zshrc#L141-L143


設定を入れたら`exec $SHELL -l`等でシェルを再起動・再読み込みすると`anyenv`が利用できます。後は`anyenv version`を実行して、以下のような感じで実行ができればOK

```bash
❯ anyenv version
ndenv: v5.6.0 (set by /Users/user/.anyenv/envs/ndenv/version)
plenv: system (set by /Users/user/.anyenv/envs/plenv/version)
pyenv: 3.5.1 (set by /Users/user/.anyenv/envs/pyenv/version)
rbenv: 2.3.0 (set by /Users/user/.anyenv/envs/rbenv/version)
```

#### pyenvのインストール

```bash
# pyenvをインストール
 ❯ anyenv install pyenv

# インストールできるpythonのバージョン一覧
 ❯ pyenv install -l
Available versions:
(中略)
  3.5.0
  3.5-dev
  3.5.1     #-> 今回これを入れる
  3.6.0a1
  3.6-dev
(略)
 ❯ pyenv install 3.5.1
 # インストールしたpythonを標準にする
 ❯ pyenv global 3.5.1
 # バージョンの確認(*がついているものが現在利用されているｐythonバージョン)
 ❯ pyenv versions
  system
* 3.5.1 (set by /Users/user/.anyenv/envs/pyenv/version)  
```

### jupyterのインストール

```bash
 # install
 ❯ pip install jupyter matplotlib
# 起動
 ❯  jupyter notebook
[I 13:47:54.142 NotebookApp] Serving notebooks from local directory: /Users/user/Dropbox/notebook
[I 13:47:54.142 NotebookApp] 0 active kernels
[I 13:47:54.142 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/
[I 13:47:54.142 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
```

### tensorflowのインストール

[Download and Setup](https://www.tensorflow.org/versions/r0.10/get_started/os_setup.html)から、現在の最新版のtensorflowのURLを調べ、インストールしていきます。

Mac版に関しては、以下の２種類があるのですが、よく分からなければCPU onlyを選んだ方が吉（GPUを積んでるmacだったらGPU enabledを選んだ方が、GPUを使って高速に処理してくれます。しかし今回は割愛しますが、インストールするものが増えます）。

> Mac OS X, CPU only, Python 3.4 or 3.5:
> Mac OS X, GPU enabled, Python 3.4 or 3.5:

```bash
# 2016/09/10現在0.10が最新Ver
$ pip install -U https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0-py3-none-any.whl
```

## 起動して遊ぶ

```bash
# 作ったtensorflowのデータを保存するディレクトリを作成（任意の場所)
 ❯ mkdir tensorflow                                                      
 ❯ ls
 tensorflow
# 作ったディレクトリを指定して、jupyterを起動
 ❯ jupyter notebook tensorflow
[I 14:38:42.255 NotebookApp] Serving notebooks from local directory: /Volumes/usb128/jupyter/tensorflow
[I 14:38:42.255 NotebookApp] 0 active kernels
[I 14:38:42.255 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/
[I 14:38:42.255 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
```

`jupyter notebook`実行後、`http://localhost:8080`をブラウザで起動すると、以下のような画面になっています。

![ 2016-09-10 14.40.58.png](https://qiita-image-store.s3.amazonaws.com/0/31824/2732f853-b894-eadc-8d1c-c0bb75709716.png " 2016-09-10 14.40.58.png")

**やったね！**

### python3を実行できるノートを作成する

では実際にtensorflowを実行していきます。以下の画像のように、右にあるNewを押下し、その中の`python 3`を選択します。

![2016-09-10_14_42_43.png](https://qiita-image-store.s3.amazonaws.com/0/31824/710d7003-1ad7-99b1-a771-03f6f06e5cab.png "2016-09-10_14_42_43.png")

すると以下の様に入力画面がでますので、ソースコードを入れてみます。

![ 2016-09-10 15.06.26.png](https://qiita-image-store.s3.amazonaws.com/0/31824/20926913-49ff-8d21-27a1-d9c61e81c43c.png " 2016-09-10 15.06.26.png")

それぞれ以下のソースコードを入力していますが、入力後そのソースコード上で`SHIFT + Enter`を押すと、実行結果が直ぐ下に出力されます（少し時間かかる場合有り）。

```python
import tensorflow as tf

hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
```

```python
import tensorflow as tf

a = tf.constant(10)
b = tf.constant(20)
print(sess.run(a + b))
```

jupyterは色々高機能で楽しいのですが、今回は操作方法等割愛します。

エンジョイ！TensorFlow！

## 参考にしたサイト

[pyenv-virtualenv + TensorFlow 環境設定覚書【加筆・修正】 - Qiita](http://qiita.com/antimon2/items/b162c05c6da06ad34f0d)