はじめに
こんにちは、最近個人的な勉強でPython、ディープラーニングをやっているtonnyです。
以前も自分で作ってみた配牌からアガれるかアガれないか予測する記事を書かせていただきました。
今更感はありますが、本日はディープラーニングの有名ライブラリであるTensorFlowを使用してみたいと思います。
環境
- Mac OS X Yosemite 10.10.5
- Docker for Mac
Docker for Macのインストールはこちらからできます。
TensorFlowのコンテナを起動する
TensorFlowのインストール手順は公式に記載がありました。
すでにTensorFlowは公開のDockerイメージがあります。
ただ、Googleのコンテナレポジトリ(この訳で合っているのでしょうか?)のTensorFlowもあるので、そちらを利用します。
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/README.md
このコンテナは2通りの利用方法があります。
1つ目はふつうにコンテナを起動し、シェルで利用する方法です。
1 | $ docker run -it gcr.io/tensorflow/tensorflow bash |
2つ目は8888番ポートで起動することで、Jupyter Notebookで立ち上げる方法です。
1 | $ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow |
今回はJupyter Notebookも使ってみたかったので、2つ目の方法でやります。
起動すると、トークン付きのURLが表示されるので、そちらでブラウザアクセスします。
Jupyter Notebook経由で見ることができます!
ちなみにPythonのバージョンは2.7.6です。
チュートリアルをやってみた
立ち上げたコンテナで、TensorFlowのチュートリアルをやってみました。
パートナーの方々が作成した日本語盤もありますが、少し古いようです。
機械学習ビギナーのためのMNIST
そのため、訳は上記のサイトを参考にさせていただきつつ、ソースコードは公式の方を見ながら進めました。
MNIST For ML Beginners
ソースコード
ほとんどの言語で最初にやることは「Hello, World」を表示させることですが、機械学習の世界ではMNISTという画像を認識することのようです。
TensorFlowを使用すると、トータルで下記のコードで良いようです。
(もちろん、ビギナーレベルで。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # MNISTデータの読み込み from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) # 各値の初期化 import tensorflow as tf x = tf.placeholder(tf.float32, [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(tf.float32, [None, 10]) # 交差エントロピー法 cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) # 1回ごとの学習率の決定 train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) # セッションの開始 sess = tf.InteractiveSession() tf.global_variables_initializer().run() # 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, tf.float32)) print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})) |
TensorFlowでは、セッションという単位で、作成したモデルを動かすことができるようです。
ゼロから作るディープラーニングを読んでいると、何となくやっていることは分かるのですが、メソッドが何をしているのか理解するのは難しいですね。
各メソッドはリファレンスが用意されています。
Python用のTensorFlowリファレンス
上記のコードを実行すると、0.9216という結果が返ってきます。
さいごに
今回はとりあえず触っただけ、になってしまいました。
まだ応用チュートリアルはやっていないので、そちらもやりつつ、配牌からアガれるかアガれないか予測するを改良するという密かな野望も進めていきたいと思います。
ちなみに、下記のQiita記事が非常に分かりやすかったので、リンクを掲載させていただきます。
特にプログラマーでもデータサイエンティストでもないけど、Tensorflowを1ヶ月触ったので超分かりやすく解説