TensorFlowによる機械学習解説シリーズ -その1 TensorFlowの始め方-

ご注意

この記事は 2016年5月17日 に書かれたものです。内容が古い可能性がありますのでご注意ください。

コンピュータ囲碁プログラム「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
Pythonが未インストールだったり、2.7系か3.3系以上でない場合はインストールして下さい。

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
実行後、「ls」コマンドを実行すると、「tensorflow」というディレクトリが作成されているかと思います。 これで仮想環境が作成できました。 今後はこの「tensorflow」ディレクトリ配下の仮想環境で作業を行ないます。

仮想環境を読み込む

次は下記コマンドで、仮想環境を読み込みます。
$ source ~/tensorflow/bin/activate
仮想環境が正常に読み込めたら、下記のように仮想環境作成時に指定したディレクトリ名が括弧に入って表示されるかと思います。
(tensorflow)yasue@tensorflow-report:~$
これでTensorFlowを最低限動かすのに必要な仮想環境の整備はこれで整いました。 次はいよいよ仮想環境に対する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と依存関係のあるライブラリも一緒にインストールしてくれます。 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!
ちゃんと「Hello, TensorFlow!」と表示できたでしょうか? エラーなく表示されたなら、動作確認は問題ないですね。 では、ここで少しコードの解説をやってみたいと思います。 ※解説に誤りや補足事項がありましたら、指摘していただければ幸いです。 (1)では、「tf.constant()」を使い、Tensor型のオブジェクトを作っています。 Tensor型というのはあまり聞き慣れない型ですが、行列のような多次元配列を扱うことができる型です。格納した値が「Hello, TensorFlow!」という文字列なので、余計に行列を扱っているという意識が薄いかもしれませんね。 試しにTensor型の変数helloを出力してみると、
print hello

Tensor("Const:0", shape=(), dtype=string)
のように、helloに格納した「Hello, TensorFlow!」という文字列ではなく、Tensor型のオブジェクトの情報が出力されます。 この出力結果からは、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
みなさんも42となったでしょうか? これで動作確認は終了です。

ちょっと寄り道 – データフローグラフって何?

動作確認も終わりましたので、少しここでTensorFlowの計算処理について説明したいと思います。 TensorFlowの計算処理は「データフローグラフ」で表されています。 「データフローグラフ」と言われても、正直あまり聞き慣れない言葉ですね。 公式ページの説明には、図付きで「ノードとエッジの有向グラフと数学的な計算を表現したグラフ」と英語で書いてありますが、この説明だけではイマイチよく分かりませんね……。 少し調べて見ましたが、データフローグラフは図1のようなグラフのことのようです。

データフローグラフ 図1.データフローグラフ例

図1を見るとデータフローグラフはノードとノードをエッジで繋げたグラフであることが分かります。 データは、エッジに従ってノードに受け渡されて計算処理が行われるようです。 具体的に今回の動作確認のコードでノードに該当するものは、「hello」がノードになります。 また、TensorFlowではノードのことをop(Operationの略)と呼んでいるようです。 データフローグラフについてはなんとなくでもイメージが湧いたかと思います。 以上のことを踏まえまして、TensorFlowの計算処理は下記のような2段階に分けることができると言えます。
  1. データフローグラフの構築する。
  2. Sessionにデータフローグラフを渡し、実際に計算を実行する。

まとめ

TensorFlowのインストールから動作確認までは無事できたでしょうか? TensorFlowのチュートリアルを通して、数学や機械学習そのもののコアな部分の理解も深められるような記事にしていきたいと思いますので、暖かく読んでいただければと思います。 ご意見や指摘事項、誤りがありましたら、コメントにて教えていだければ幸いです。 次回はMNISTのチュートリアルを紹介しますので、お楽しみ下さい。  

Google のクラウドサービスについてもっと詳しく知りたい、直接話が聞いてみたいという方のために、クラウドエースでは無料相談会を実施しております。お申し込みは下記ボタンより承っておりますので、この機会にぜひ弊社をご利用いただければと思います。

無料相談会のお申込みはこちら