この記事は最終更新から6年以上経過しています。内容が古くなっている可能性があります。
Machine Learning界の “Hello World!”であるMNISTをTensorFlowで実行した際のメモ。自分用に実行コードにコメントを入れただけなので、細かな説明は一切ありません。
- OS:Windows10
- TensorFlow-CPU版のバージョン:1.9
MNIST For ML Beginnersとは
Machine Learningでの “Hello World!”に相当するプログラム。アメリカ国立標準技術研究所提供の手書き数字データに対して教師あり学習を行い、数字の分類を行う。
実行コード
# プログラムの読み出し from tensorflow.examples.tutorials.mnist import input_data # 「MNIST_data」フォルダを作成し、データをダウンロード mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) # TensorFlowをインポートし、「tf」という別名をつける import tensorflow as tf # 画像データ用に784個の空の入れ物を作成 x = tf.placeholder(tf.float32, [None, 784]) # 重み用の変数を初期値0で作成 W = tf.Variable(tf.zeros([784,10])) # バイアス用の変数を初期値0で作成 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() # セッションの作成 sess = tf.Session() # セッションの開始及び初期化 sess.run(init) #1000回学習する for i in range(1000): #トレーニングデータからランダムに100個抽出する batch_xs, batch_ys = mnist.train.next_batch(100) #勾配降下法によりクロスエントロピーを最小化するように重みを更新する sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) #予測値と正解値を比較し、True or Falseで返す #argmax(y,1)は予測値の各行で最大となるインデックスをひとつ返す correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) #True,Falseをcastで0もしくは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})) 0.9196
結果:約92%の正解率