こんにちは。だいぶ涼しくなってきました。これはPythonを使ったことの無い初老のプログラマが、機械学習の学習(←機械に使われている感が満載)をしようとしているところの初動メモです。(手探りなので随時更新する予定です。)
Anacondaのインストール
Anacondaとは、Python本体とAnacondaが『Data Science Libraries』と呼ぶ機械学習およびそれに必要なライブラリをセットにしたパッケージのようです。
公式サイトからダウンロードしてインストールします。ディストリビューションはWin,Mac,Linuxと充実しています。ちなみに自分はMacにインストールしました。
Anaconda Navidatorを使う
インストールしたアイコンをクリックすると、Anaconda Navidatorが起動します。
Jupyter notebookの起動
公式ガイドはこちら
先ほどの画面で、jupyterを起動するボタン(Launch)を押します。
→環境を新しく作ると、Install→Launchと、インストールが先に必要になるようです。
起動すると早速エラー。
[I 11:42:10.592 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/?token=41d7fc8bdb3a35fe1cba4ffebb72ab2104a8a49cfe041177
[I 11:42:10.592 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 11:42:10.594 NotebookApp]
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://localhost:8888/?token=41d7fc8bdb3a35fe1cba4ffebb72ab2104a8a49cfe041177
0:97: execution error: "http://localhost:8888/tree?token=c5d5948f0ebe9d59988acddbc6655a66a93128a68bc28413" doesn’t understand the “open location” message. (-1708)
URLをコピペして〜とメッセージに書いてあるとおりにします。Chromeを起動し、
- URLに『http://localhost:8888』をコピペして実行
- ログイン画面になるので、そこのToken欄に、token=の後をコピペして実行(上記例だと41d7fc8bdb3a35fe1cba4ffebb72ab2104a8a49cfe041177)
execution errorのあとのTokenが、最初のTokenと異なる値になっているのが何故なのかはよく分かりません…とにかく、最初のメッセージ"The Jupyter Notebook is running at:"の環境が正しいようです。("Copy/paste this URL..."のあとも同じURLになっていますね)
そして、Macを再起動するとエラーが消えました。なんだったんでしょう。
[I 23:23:30.037 NotebookApp] 0 active kernels
[I 23:23:30.037 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/?token=ffd10efe43c1f78ccf733822665ecab69c231aa4c5e4485a
[I 23:23:30.037 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 23:23:30.038 NotebookApp]
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://localhost:8888/?token=ffd10efe43c1f78ccf733822665ecab69c231aa4c5e4485a
[I 23:23:30.377 NotebookApp] Accepting one-time-token-authenticated connection from ::1
Jupyter notebookの使い方
既に素晴らしい記事がありますので、引用します
機械学習のチュートリアル
Pythonの機械学習の本を見ながら、githubにあるサンプルソースコードをjupyter notebookで動かしています。
.ipynbのページの先頭に書いてあるライブラリ(バージョンはノートに記載のバージョンに従う必要があります)をインストールし、実行時のタイムスタンプなどをプリントするwatermarkというパッケージもインストールする必要があります。
Sebastian Raschka
last updated: 2017-10-02
CPython 3.6.2
IPython 6.1.0
numpy 1.13.1
pandas 0.20.3
matplotlib 2.0.2
scipy 0.19.1
sklearn 0.19.0
このあと、メニューから『Run Cells』を選択するか、再生ボタンのアイコン・ボタンを押すと、Pythonのコードが実行されるようです。ノートブックの下部のコードは、上部で宣言しているクラスや変数を参照しているので、ノートの上から実行していく必要があります。
Tensorflow
インストール
Anacondaの環境に他のパッケージを追加する方法がガイドににあり、conda installコマンドでインストールすることができると記載されています。
追加できるパッケージの一覧はこちらで、Tensorflowもconda installコマンドでインストールできるのですが、バージョンが1.1.0(2017年10月6日現在)で少し古いようです。
そこで、Tensorflowの公式インストールガイド(Mac)を見ると、Anacondaの環境でのインストール手順が掲載されています。
ガイドだとpython2向けのコマンドなので、同じガイドの別のページを参考にpython3向け環境にすると
(tensorflow)$ pip install --ignore-installed --upgrade \
https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.3.0-py3-none-any.whl
となります。
インストールしたあとに、パッケージの一覧を見るとこんな感じ…
(tensorflow) bash-3.2$ conda list -n tensorflow
# packages in environment at /Users/xxxxx/anaconda/envs/tensorflow:
#
bleach 1.5.0 <pip>
certifi 2016.2.28 py36_0
html5lib 0.9999999 <pip>
libprotobuf 3.2.0 0
Markdown 2.6.9 <pip>
mkl 2017.0.3 0
numpy 1.12.1 py36_0
numpy 1.13.3 <pip>
openssl 1.0.2l 0
pip 9.0.1 py36_1
protobuf 3.2.0 py36_0
protobuf 3.4.0 <pip>
python 3.6.2 0
readline 6.2 2
setuptools 36.5.0 <pip>
setuptools 36.4.0 py36_1
six 1.11.0 <pip>
six 1.10.0 py36_0
sqlite 3.13.0 0
tensorflow 1.3.0 <pip>
tensorflow 1.1.0 np112py36_0
tensorflow-tensorboard 0.1.8 <pip>
tk 8.5.18 0
werkzeug 0.12.2 py36_0
Werkzeug 0.12.2 <pip>
wheel 0.29.0 py36_0
wheel 0.30.0 <pip>
xz 5.2.3 0
zlib 1.2.11 0
最初にconda install tensorflowを実行したために、1.1.0のパッケージも入っています。大丈夫かな…
動作確認
インストールガイドやGithubの動作確認コードをJupyter notebookで実行します
in[1]:
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
b'Hello, TensorFlow!'
in[2]:
a = tf.constant(10)
b = tf.constant(32)
sess.run(a + b)
out[2]: 42
in[3]:
sess.close()
無事動きました。
Google Cloud Platform (GCP)で動かす
次に、TensorflowをGCPのCloud ML Engineで動かします。
基本的にはローカルで動作確認をして、gcloudコマンドで、GCPにジョブとして投入するのですが、実行環境について注意事項があるので、ここにメモします。
クラウド版の注意事項①
-
GPUサポートは現時点で下記のリージョンのみサポートされる
- us-east1
- asia-east1
- europe-west1
-
Cloud ML Engine jobsは、入力/出力データの格納先であるGoogle Cloud Storage bucketと同じリージョンでなければならない
ということで、日本から使うときは、アジア(asia-east1:台湾)で設定をしたら良さそうなので、それで進めています。
クラウド版の注意事項②:predictionがサポートされるRegion
Cloud ML Engineはasia-east1でGPU含めサポートされているのですが、それで進めていたら、生成されたモデルをEngineにdeployして予測機能を使おうとすると、このリージョンは使えませんというエラーが出ました…
(/Users/xxxxxxx/anaconda/envs/gcp) bash-3.2$ gcloud ml-engine models create $MODEL_NAME --regions=$REGION
ERROR: (gcloud.ml-engine.models.create) INVALID_ARGUMENT: Field: model.regions Error: The provided GCE region 'asia-east1' is not available. Options are [asia-northeast1, europe-west1, us-central1, us-east1].
- '@type': type.googleapis.com/google.rpc.BadRequest
fieldViolations:
- description: The provided GCE region 'asia-east1' is not available. Options are
[asia-northeast1, europe-west1, us-central1, us-east1].
field: model.regions
(/Users/xxxxxxx/anaconda/envs/gcp) bash-3.2$ gcloud ml-engine models create $MODEL_NAME --regions=asia-northeast1
asia-northeast1は東京ですね。こちらに切り替えたら無事にモデルが生成されました。
今日はここまで