kyosho5’s blog

貧乏で数学があまり得意ではない理系出身のエンジニアのブログ

【Tensorflow】 MNIST【はじめの一歩】

機械学習を始めよう!」 「Tensorflowを使ってみよう!」 「え?チュートリアルは全部英語なんですか?」




そういって機械学習を学習するチャンスをみすみす見逃すのはもったいないので、頑張って英文読んで作った「一番最初のMNIST」を掲載したい。




作った、というのは語弊があって、ほぼチュートリアルのコピペでしかないけど。




これからの時代、「英語が使えない」という言い訳は一切通用しないので、このコメント付きソースを読んで、実行してみて、雰囲気つかんだらまた英文のチュートリアルを頑張ってみてください。(Pythonの実行環境がそろっていればコピペで使えます)


#MINSTデータのダウンロードとインストール

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

#Tensorflowのインポート
import tensorflow as tf

#784要素のベクトルへ変換されたMINST画像データを入力する
#None:可変長の意味
x = tf.placeholder(tf.float32, [None, 784])

#重みWとバイアスbを初期化(要素はすべて0埋め)
#784次元のベクトルを掛けあわせて10次元のベクトル(クラスに相当)を作る
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]))

#学習率を0.5設定した勾配降下法を用いる
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

#これまでに作成した変数をすべて初期化する
init = tf.initialize_all_variables()

#Sessinoの中でモデルを起動し、変数の初期化処理を実行する
sess = tf.Session()
sess.run(init)

#1回のループでランダムに選択した100個のデータをバッチとして取得。
#train_stepはこれらのバッチデータを流しこむことでプレースホルダを置き換える
for i in range(10000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    sess.run(train_step, feed_dict={x:batch_xs, y_:batch_ys})


#tf.argmax(y,1)は入力に対してモデルが予測した最も高い確率のラベルを返却する。
#tf.argmax(y_,1)は正しいラベルを返却しする
#予測が正しく行われたかどうかを確認するため、tf.equalを使う
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))

#真偽値のリストを取得、浮動小数点へキャストし平均を算出する。
#ex) [True, False, True, True]→[1, 0, 1, 1]→0.75
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

#最終的な正答率を出力する(だいたい92%くらい)
print(sess.run(accuracy, feed_dict={x:mnist.test.images, y_:mnist.test.labels}))






頑張るためのヒントとしては、①数学(大学の線形代数微積分の基本的な部分がわかれば十分だと思います)②英語(まずはストレスなく英文が読めるようになりたい)③Python(PaizaでBランクとったら結構すごいのかな…) とか?




うん、上から目線な言い方になってしまったな。まぁいいや。なんでもないや。 私もここまで来るのにかなりかかったけど、これからもっともっと精進したい。




世の中には独学でかなり面白いテーマで機械学習に取り組んでいる人がたくさんいる。 たまに知人の開催する勉強会に参加させてもらうけど、登壇する人はほぼ漏れなくかなりレベルの高い話をしているし、




テーマは超面白いし、話しぶりからも「ワクワクしている」感じが伝わってくる。




私も、早くそうなりたいものです。ていうか、追いつけ追い越せで頑張っていきます。