【締め切り間近】プログラムの応募は6月23日(金)まで! Global Challenge! STARTUP TEAM FUKUOKA

freshtrax

ビートラックスがサンフランシスコから最新情報を配信中

  • Yuichi Shiga

    Yuichi Shiga

    Software Engineer

    Lead developer. He loves leading-edge technology, programming, application development. He is focusing on development of the Internet of Things at btrax. He also has skills of web applications development and mobile apps, he often develops applications on the weekend.

  • → 記事一覧

    • このエントリーをはてなブックマークに追加
    • follow us in feedly
  • Nov 29, 2015

shutterstock_231578833

Googleが提供する機械学習ライブラリ TensorFlow を1時間で試してみた

shutterstock_231578833Googleは2015年11月10日に機械学習のライブラリTensorFlowをオープンソースとして公開した。すでにGoogleの写真検索や、音声認識技術に使用されているもので、大きな注目を集めている。AmazonやFacebookも機械学習システムをオープンソースとして公開している。オープンソースのライセンスは、Apache 2.0だ。簡単にいうと使っていることを明記さえしておけば、商用でも利用可能である。今後、様々なサービス、研究機関等で機械学習が使われていくことが増えると予想される。機械学習、AIは基盤技術としてすべての産業に影響を及ぼすことから、今後見逃せない動きである。

参考:

TensorFlowのインストール

今回は、機械学習に馴染みがない人がまずTensorFlowを試してみることを目的にしている。なお、この記事はMacを対象としている。OSは、Mac OS X Yosemite(10.10.5)だ。 次の説明に従って、TesorFlowをインストールする。公式ドキュメント Getting Started

環境

Ubuntu/Linux、Mac OS Xに対応している。今回はMac OS X Yosemite(10.10.5)を使う。まだWindowsには対応していないようだ。

TensorFlowはPythonで動かすことができる。Pythonは日本では最も人気がある言語ではないが、少なくともシリコンバレーでは人気が高い。pythonでDjango等を使ってWebアプリを作っている人も多い。また自然言語処理などのライブラリも充実していてるため、この分野に興味がある人はぜひ学んでみよう。個人的な感想だが、癖がなく学びやすい言語だと思う。ちなみに、Raspberry PiもPythonでプログラムできる。

なお、Python2.7が必要であるため注意しよう。(3系の動作は確認していないが、公式ドキュメントでは2.7が必要と書かれている。)

pythonのバージョンは以下のコマンドで確認できる。

$ python -V
Python 2.7.10

インストール

Pythonのパッケージ管理システムのpipを用いてインストールすることができる。

また、公式ドキュメントでも推奨されているように、virtualenvを使った。virtualenvを使えば、環境ごとにPythonのバージョンと、パッケージを管理できる。

$ sudo pip install --upgrade virtualenv
$ virtualenv --system-site-packages ~/tensorflow
$ cd ~/tensorflow/
$ source bin/activate # bashの場合. cshの場合は $ source bin/activate.csh となる
(tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl

実行確認

以下のHello World と、簡単な足し算のソースで正しくインストールされたことを確認しよう。

(tensorflow)$ python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
>>>

チュートリアル

Googleはすでに10個のチュートリアルを提供している。まず、機械学習に馴染みがない人向けのチュートリアル、MNIST For ML Beginnersをやってみよう。

MNISTとは、以下の画像のような、手書きの文字列を認識するものである。画像認識では定番と言えるテーマだ。プログラムでいうとHello worldのようなものだと思う。

なおこのチュートリアルは、TensorFlowを学習するための簡易なもので、正解率はおおよそ91%しかない。これはTensorFlowの性能が低いということではなく、あくまで練習用の課題であるためだ。より本格的なMNISTのチュートリアルは別に用意されている。

MNISTデータ

MNIST用のデータは、機械学習の著名な研究者であるYann LeCun氏のwebsiteで公開されている。チュートリアルで、データセットをWebから取得してローカルに保存するスクリプトが提供されているのでそれをありがたく使うことにする。機械学習では、アルゴリズムの正確性を評価するために、共通のデータセットを使うことが多い。今回使うデータセットは、他の機械学習のライブラリのサンプルでも良く使われるものだ。

ソースコードをダウンロードし、input_data.pyを作る。minst.pyから以下のように呼び出す。

minst.py

import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

実行すると、ディレクトリ(MNIST_data)が作成され、その中にデータが保存される。

(tensorflow)$ python minst.py
(tensorflow)$ ls
MNIST_data	input_data.py	input_data.pyc	mnist.py

60,000の学習用データと、10,000のテスト用データが入っている。結果を一般化するために、学習用データとテスト用のデータが分かれていることが重要で、テスト用データを学習させてはいけない。なお、それぞれの画像の大きさは、28×28ピクセルである。

チュートリアルでは、細かくステップに応じて解説をしてくれている。ソースコードを1つにまとめると、次のようになる。

mnist.py

import input_data
import tensorflow as tf

# データのダウンロード
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
sess = tf.InteractiveSession()

# 入力用のプレースホルダー(実行時に入力する変数)の定義
# 画像枚数はどんな値でも入れられるようにNone(指定しない)にしておく、 28×28ピクセル = 784次元という意味
x = tf.placeholder("float", [None, 784])

# 重みとバイアスの変数の定義
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))

# モデル式
y = tf.nn.softmax(tf.matmul(x,W) + b)

# 正しい値を入力するためのプレースホルダー
y_ = tf.placeholder("float", [None,10])

# コスト関数
cross_entropy = -tf.reduce_sum(y_*tf.log(y))

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

# 学習。1000ステップ行う
for i in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

# 正答率の算出
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

# 結果を出力
print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})

実行すると、結果として0.91前後の値が得られる。計算量が少ないため、すぐに結果が得られる。

(tensorflow)$ python mnist.py
Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
0.9206

これはあくまで勉強用のサンプルでしかなく、精度もかなり低い。熟練者用のMNISTのチュートリアルも用意されているので、次はこれもやってみるとよいだろう。

TensorFlowはすぐに、楽チンに使えるものではない

TensorFlowは機械学習初心者がすぐに使えるようなものではないということ。私自身も含めてTensorFlowがなんだか注目されてるから触ってみたいという人も多いが、ちょっと興味があるからといってすぐに使えるものではない。

TensorFlowでは、数式で表されるアルゴリズム、概念を、比較的直感的にそのままプログラムとして表すことができる。しかし、ニューラルネットワークはもちろん、最適化問題についての基本知識がないと、アルゴリズムはチンプンカンプンだ。「コスト関数」、「最急降下法」など、基本的な単語が出てくるたびに困ると思う。このため、最低でも高校や大学で数学をやった人でないと難しい部分が多い。

TensorFlowはやろうと思えばいろんなことができるが、アルゴリズムや使い方がわからなければ、何もすることができない。これを機に、機械学習について学んでいきたいという人ならチャレンジすべきだが、まず人工知能をちょっと試したいという人は、IBMが提供するWatson APIなどの、自然言語処理や、感情表分析、画像解析などの目的毎に分けられていて、APIとして提供されているもののほうが使い方も簡単でよいと思う。今後、機械学習や機械学習のAPIについて、このブログでも紹介していきたい。

筆者: Yuichi Shiga / Software Engineer, btrax, Inc.

【締め切り間近】プログラムの応募は6月23日(金)まで!

日本の企業に世界最高のイノベーションメソッドを

イノベーション創出サービスを提供するbtraxでは、イノベーションの最先端を行く本場サンフランシスコ・シリコンバレーにて、デザイン思考や、ユーザー中心デザインなど、新プロダクト・サービス発案のメソッドを通じ新規事業の創出サポートを提供しています。このプログラムはイノベーションを生み出すための人材開発にも貢献します。

海外展開のノウハウ、スタートアップ企業とのネットワーキング等も直接体験をするイノベーションブースターの詳細はこちらから。資料請求はお気軽にtokyo@btrax.comまでご連絡下さい。

 banner-research 

Like us on Facebook

Scroll to top

シリコンバレーから最新情報をゲット!

 

btrax-logo-100

サンフランシスコに本社を構えるクリエイティブエージェンシーbtraxのニュースレターに登録して最新の情報をいち早くゲットしませんか?

 

・オウンドメディアfreshtrax 今月の注目記事

・CEO Brandonの無料オンラインセミナー情報

・最新サービス・現地イベント情報

 

Subscribe!
Twitterで共有
Facebookで共有
はてなブックマークに追加
pocketで共有
Lineで共有