コンピュータ囲碁プログラム「AlphaGo」が韓国のプロ棋士に4勝1敗で勝ち越したことで、最近ではよく「機械学習」という言葉を耳にする機会が増えたように思えます。
そのせいか、私自身も「機械学習」には少なからず興味が湧いている今日このごろ。
しかし、「機械学習」と聞くと、
- 専門的な知識が必要
- 大学や研究機関でしっかりと学んだ人がやるモノ
という印象があり、専門的な知識もない文系プログラマーな私には最初の一歩がどうしても踏み出せませんでした。
この「TensorFlowによる機械学習解説」シリーズでは、そんな最初の一歩を踏み出せない人のために、機械学習をやったとこのない人でも理解出来る内容で、TensorFlowのインストールから公開されているチュートリアルを実践、勉強しつつ解説をできる限りしていきたいと思います。
第一回目である今回は、TensorFlowのインストールから簡単な動作確認までを解説していきたいと思います。
目次
TensorFlowって何?
簡単に言うと、Googleがオープンソースとして公開した機械学習のライブラリです。
冒頭で書いた「AlphaGo」の学習にもこの「TensorFlow」が使われていますが、他にもGoogleフォトなどのGoogleのサービスでも使われているライブラリです。
2016/05/17時点の最新バージョンは0.8となっています。
チュートリアルによると、インストールできるOSはLinuxとMac OS X、開発言語はC++とPythonの2つだけです。
「TensorFlow解説」シリーズでは、OSはUbuntu14.04、開発言語はPythonの環境を前提に説明していきます。
TensorFlowのインストール手順
TensorFlowのインストール環境は、Google Compute Engine(以降GCEと呼称)上に用意しました。
GCEのVMインスタンスのスペックは下記の通りです。参考までにどうぞ。
OS | Ubuntu14.04LTS |
Machine type | n1-standard-2 (2 vCPUs, 7.5 GB memory) |
CPU platform | Intel Ivy Bridge |
Boot disk and local disks [Size (GB)] | 10 |
Boot disk and local disks [Type] | SSD persistent disk |
Boot disk and local disks [Mode] | Boot, read/write |
また、インストールの手順は基本的には下記ドキュメントの手順に従って行ないます。
インストール手順: https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html#download-and-setup
※インストールの手順はOS毎に若干違うかと思いますので、適宜自分の環境に合うように読み替えて下さい。
実行環境を整える
まずは、ライブラリをインストールする前にTensorFlowの実行環境を整えたいと思います。
作業は、homeディレクトリ直下のユーザディレクトリにて行ないます。
Pythonのバージョン確認
TensorFlowが使えるPythonのバージョンは2.7系か3.3系以上なので、下記コマンドを実行してPythonのバージョンを確認しましょう。
$ python -V
pipとvirtualenvのインストール
Pythonを使っている人にはお馴染みの2つのパッケージをインストールします。
下記コマンドを実行すると、pip(*1)とvirtualenv(*2)の両方のインストールが実行できます。
$ sudo apt-get install python-pip python-dev python-virtualenv
*1) pipはPythonのソフトウェアパッケージを管理してくれるパッケージです。
*2) virtualenvはPythonの仮想環境を作ることができるパッケージです。
virtualenvの仮想環境を作る
pipとvirtualenvのインストールが完了したら次はvirtualenvの環境を作ります。
下記のコマンドを実行します。
$ virtualenv --system-site-packages ~/tensorflow
これで仮想環境が作成できました。
今後はこの「tensorflow」ディレクトリ配下の仮想環境で作業を行ないます。
仮想環境を読み込む
次は下記コマンドで、仮想環境を読み込みます。
$ source ~/tensorflow/bin/activate
(tensorflow)yasue@tensorflow-report:~$
次はいよいよ仮想環境に対するTensorFlowのインストールです。
仮想環境へのTensorFlowのインストール
TensorFlowのインストールは簡単です。
TensorFlowはpipでインストールできるようにwheelファイル(*3)が公式で提供されています。
*3) wheelファイルとはPythonのパッケージング形式でビルドされたファイルのことです。
Pythonのライブラリやパッケージの配布によく使われています。
最新のTensorFlowのwheelファイルの指定方法は公式ページにありますので、確認して下さい。
https://www.tensorflow.org/versions/master/get_started/os_setup.html#pip-installation
では、TensorFlowをインストールします。
(tensorflow)yasue@tensorflow-report:~$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl
TensorFlowにはGPU版とCPU版の2種類があるのですが、GCEのVMインスタンスではGPUが使用できないためCPU版をインストールしました。
ここまででインストールは完了です。
TensorFlowで「Hello, TensorFlow!」
さて、インストールが完了したら、次はPythonからTensorFlowが使用できるかどうか確認しましょう。
Pythonをインタプリタで実行し、下記のコードを実行してみましょう。
(tensorflow)yasue@tensorflow-report:~$ python
import tensorflow as tf # TensorFlowのライブラリをインポートします。
# (1)
hello = tf.constant('Hello, TensorFlow!')
# (2)
sess = tf.Session()
print(sess.run(hello))
Hello, TensorFlow!
エラーなく表示されたなら、動作確認は問題ないですね。
では、ここで少しコードの解説をやってみたいと思います。
※解説に誤りや補足事項がありましたら、指摘していただければ幸いです。
(1)では、「tf.constant()」を使い、Tensor型のオブジェクトを作っています。
Tensor型というのはあまり聞き慣れない型ですが、行列のような多次元配列を扱うことができる型です。格納した値が「Hello, TensorFlow!」という文字列なので、余計に行列を扱っているという意識が薄いかもしれませんね。
試しにTensor型の変数helloを出力してみると、
print hello
Tensor("Const:0", shape=(), dtype=string)
この出力結果からは、helloというTensor型の変数は、
- 「Const」となっているので、『定数』として定義されている
- 「shape」の値が空なので、0次元である
- 「dtype」が「string」なので、値のデータ型が文字列である
ということが分かります。
(2)では、「tf.Session()」でSessionオブジェクトを作成し、「print(sess.run(hello))」でSessionにTensor型の変数であるhelloを渡し、計算を実行して、「print()」で文字列のまま出力までを行なっています。
次は、足し算をしてみましょう。
# (3)
a = tf.constant(10)
b = tf.constant(32)
# (4)
print(sess.run(a + b))
42
これで動作確認は終了です。
ちょっと寄り道 – データフローグラフって何?
動作確認も終わりましたので、少しここでTensorFlowの計算処理について説明したいと思います。
TensorFlowの計算処理は「データフローグラフ」で表されています。
「データフローグラフ」と言われても、正直あまり聞き慣れない言葉ですね。
公式ページの説明には、図付きで「ノードとエッジの有向グラフと数学的な計算を表現したグラフ」と英語で書いてありますが、この説明だけではイマイチよく分かりませんね……。
少し調べて見ましたが、データフローグラフは図1のようなグラフのことのようです。
図1を見るとデータフローグラフはノードとノードをエッジで繋げたグラフであることが分かります。
データは、エッジに従ってノードに受け渡されて計算処理が行われるようです。
具体的に今回の動作確認のコードでノードに該当するものは、「hello」がノードになります。
また、TensorFlowではノードのことをop(Operationの略)と呼んでいるようです。
データフローグラフについてはなんとなくでもイメージが湧いたかと思います。
以上のことを踏まえまして、TensorFlowの計算処理は下記のような2段階に分けることができると言えます。
- データフローグラフの構築する。
- Sessionにデータフローグラフを渡し、実際に計算を実行する。
まとめ
TensorFlowのインストールから動作確認までは無事できたでしょうか?
TensorFlowのチュートリアルを通して、数学や機械学習そのもののコアな部分の理解も深められるような記事にしていきたいと思いますので、暖かく読んでいただければと思います。
ご意見や指摘事項、誤りがありましたら、コメントにて教えていだければ幸いです。
次回はMNISTのチュートリアルを紹介しますので、お楽しみ下さい。