BluemixのData Science ExperienceでTensorFlowのTutorialを動かしてみる

Data Science Experience（DSX）は、データサイエンティスト向けの統合ツールで、Jupyter Notebookサーバーをホストしています。Webに公開されているNotebookをインポートすることができるので、GitHubのtensorflow/tensorflowリポジトリ内にあるTutorialをインポートして動かしてみます。

手順は以下のとおりです。

1. DSXインスタンスを作成する
2. Jupyter Notebookを用意する
3. DSXにJupyter Notebookをインポートする
4. TensorFlowのTutorialを実行する

------

## 1. DSXインスタンスを作成する
Bluemixアカウント（トライアルアカウントでOK）はすでに持っている前提で話を進めます。本記事では次のアカウントを使用しています。

+ アカウント名（IBMid）：a2super@takeyan.xyz
+ 組織名：a2super
+ スペース名：dev

まずBluemixのポータル（https://bluemix.net ）にログインし、カタログのページに移動して、左ペインの全てのカテゴリーから「データ＆分析」を選択し、右側のサービス一覧の中からData Science Experienceを選択します。
<img width="1280" alt="Screen Shot 2017-09-17 at 15.57.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/f29fc909-252b-096e-d42a-9432b4755307.png">


次の画面でそのまま作成をクリックします。サービス名等はデフォルトのままでOKです。
<img width="1280" alt="Screen Shot 2017-09-17 at 15.59.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/b0e47d7a-859e-3fd6-9475-e61d4259b3fa.png">


「Get Started」をクリックして先に進みます。
<img width="1280" alt="Screen Shot 2017-09-17 at 16.00.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/c4a9eaa2-3fd3-1f99-db30-c9365bd71712.png">

DSX用の組織、スペースを設定する画面が現れます。デフォルト（Bluemix用の組織・スペース）を受け入れて、「Continue」で続行します。
<img width="1280" alt="Screen Shot 2017-09-17 at 16.01.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/a7c3d2ed-11b4-1295-4d42-bde4a87b7227.png">

DSX用のオブジェクトストレージ（プログラムやデータを保管）とSpark（プログラムを実行）のインスタンスを作成に数分かかります。作成が完了するとDSXのポータル画面に切り替わります。以下のような画面が表示されたらOKです。
<img width="1280" alt="Screen Shot 2017-09-17 at 20.27.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/a3ad3c09-d0e2-1692-2692-ec2353dce7f9.png">

Bluemixを経由せず、https://datascience.ibm.com からDSXにログイン（初回はサインアップ）してDSXのポータルにたどり着くこともできます。


## 2. Jupyter Notebookを用意する

まずインポートするJupyter NotebookのURLを確認しておきます。GitHubのTensorFlowのリポジトリに、Dockerコンテナ版TensorFlowのサンプルとしてJupyter Notebookが用意されています。リポジトリのURLはこちら（https://github.com/tensorflow/tensorflow） です。
ここからフォルダをtensorflow→tools→docker→notebooksとたどっていくと、以下の画面にたどり着きます。
<img width="1280" alt="Screen Shot 2017-09-17 at 20.32.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/8851cf62-8274-ef82-b586-04fb5256d042.png">

Jupyter Notebook（拡張子jpynbのファイル）が3つありますが、このうち 	3_mnist_from_scratch.ipynbを使うことにします。このファイルを開いた画面を以下にしめします。
<img width="1280" alt="Screen Shot 2017-09-17 at 20.34.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/5d95af8e-d534-9ba6-0a78-76a715c68d3c.png">

このファイルのURL（https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/notebooks/3_mnist_from_scratch.ipynb） をインポートで使用します。

## 3. DSXにJupyter Notebookをインポートする

DSXのポータルに戻って「Default Project」をクリックします。
<img width="1280" alt="Screen Shot 2017-09-17 at 20.36.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/5ca5c645-91a3-c5b0-babd-5b6f4c6e39d2.png">

ここでJupyter Notebookをインポートします。「add notebook」をクリックして下さい。
<img width="1280" alt="Screen Shot 2017-09-17 at 20.39.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/adff9e59-1d52-bbae-0282-2c60f744c8e3.png">

Create Notebookの画面が開くので「From URL」のタブに切り替えます。ここで「Notebook URL」にGitHubのJupyter Notebook（拡張子jpynbのファイル）のURLをコピペして下さい。「Name」にはNotebookのタイトル（ここではMNIST from scratch）を記述して下さい。
必須項目を記入すると「Create Notebook」のボタンが有効になるのでクリックして下さい。
<img width="1276" alt="Screen Shot 2017-09-17 at 20.45.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/c41853d2-cd03-7b9d-bdd5-61ae67c6c0fd.png">

Notebook作成が完了すると以下の画面に切り替わります。GitHubのJupyter Notebookがそのままコピーされました。
<img width="1280" alt="Screen Shot 2017-09-17 at 20.51.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/0edf32b7-e348-61e0-c077-04b6b4f70493.png">


## 4. TensorFlowのTutorialを実行する

Jupyter Notebookの準備ができたら、後はプログラムをそのまま実行するだけです。コードを含むセルが選択されている状態で、タスクバーの実行ボタン（三角のボタン）を実行して下さい。
<img width="1278" alt="Screen Shot 2017-09-17 at 21.19.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/a615d1e9-6935-d756-f5c1-88cb2a11defd.png">

実行ボタンをクリックしてコードが実行中になるとInの右側が[*]の表示になり、実行完了すると実行順を示す数字が入って、次のセルに選択状態が移動します。これを繰り返してコードを上から順番に実行して下さい。

DSXのJupyter Notebookの詳細な使い方は以下のURLのページ、およびそのページで紹介している各リンク先を参考にしてください（残念ながらまだ英語のみですが、いずれ日本語化されていくと思います）。
https://datascience.ibm.com/docs/content/analyze-data/notebooks-parent.html

以上です。