TensorFlowでディープラーニングを試してみる
- 2015.12.06
- Deep Learning
最近巷で話題のディープラーニングですが、手を出すには敷居が高いと考えていた方も多いと思います。
そんな中、Googleがディープラーニングに対応した機械学習のオープンソースのライブラリを公開しましたので、試してみました。
下準備
セットアップの方法は、こちらに記載されています。
私はUbuntuで試してみました。なお、64 bitにしか対応してないようです。
1 2 |
$ sudo apt-get install python-pip python-dev $ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl |
手書き数字認識
チュートリアルとして、手書き数字の認識が用意されています。Google曰く、機械学習のプログラムの”Hello World”に当たるのが、この数字の認識だそうです。
MNIST For ML Beginners
チュートリアルは上記のリンク先にありますが、チュートリアル中のコードを動かすには、input_data.pyが必要です。
リンク先からコピペするか、下記で色々まとめて、ダウンロードしておきます。
1 |
git clone https://github.com/tensorflow/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 26 27 28 29 30 31 32 |
import input_data import tensorflow as tf #load images mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) #place holder x = tf.placeholder(tf.float32, [None, 784]) #weight W = tf.Variable(tf.zeros([784, 10])) #bias b = tf.Variable(tf.zeros([10])) #normalize y = tf.nn.softmax(tf.matmul(x, W) + b) #placeholder y_ = tf.placeholder(tf.float32, [None, 10]) #cross entropy cross_entropy = -tf.reduce_sum(y_ * tf.log(y)) #minimize cross_entropy using the gradient descent algorithm train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) #initialize all variables init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) #training step 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 boolean list correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) #cast to float point numbers accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) #show result print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}) |
以上のコードを実行すると、学習が始まり結果が出ます。(画像は勝手にダウンロードしてくれます)
特に数字をいじらなければ、約91%になります。それなりに高い数字のようにも思いますが、あまり良くない数字だそうです。これは次のチュートリアルで更に高精度になるようです。
流石にコードをコピペしただけでは、何やってるのか良く分からないと思うので、チュートリアルの文章は読む必要があります。
普通のニューラルネットワークはともかく、ディープラーニングに関しては、日本語の情報が少ないので、中々苦労しますが、色んなことが出来そうですので、このライブラリ公開を機に、手を出してみては如何でしょうか。
-
前の記事
SmartWatch3 SWR50レビュー 2015.11.28
-
次の記事
ネットワーク機能を使ったアプリケーション間の通信 (Unity) 2016.02.14