ロカラボは日本のモノづくりを全力で応援する会社です

メイドインジャパンを盛り上げる

・AI/IoT/RPAの導入支援
・地に足のついたムダのない適切な技術活用
・大手にはできない柔軟性と親身な対応

御社の価値を最大限に引き出し一緒に成果を出していく一歩を踏み出しませんか?

詳細はこちら

TensorFlowを使ってシンプルなニューラルネットワークモデルを作ってみる

TensorFlowを使ってシンプルなニューラルネットワークを作ってみる AI・機械学習・ディープラーニング
TensorFlowを使ってシンプルなニューラルネットワークを作ってみる

Tensorflowを使ってシンプルなニューラルネットワークの構築について簡単な説明をしてみます。データにMNISTデータを使います。

まず、Tensorflowをインストールしましょう。1

MNISTデータは、各画像のラベルがその画像内の実際の値を示す手書き数字の集合である。各画像は28×28ピクセルで、この配列を7842のベクトルに平坦化します。

まず、Tensorflowをインポートし、MNISTのデータをロードします。

import tensorflow as tf

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

モデルにデータを渡すために、まず28×28イメージデータ用と、結果格納用に(0〜9)に1つずつ、Tensorflowプレースホルダを作成します。

X = tf.placeholder(tf.float32, shape=[None, 784]) 
Y = tf.placeholder(tf.float32, shape=[None, 10])

次に「重み」と「バイアス」用に変数を作成します。

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

モデルを訓練するときに役立つ、いくつかのパラメータを定義します。

batch_size = 100
learning_rate = 0.01
training_epochs = 10

モデルを宣言します。隠れ層のないシンプルなニューラルネットワークです。

y = tf.nn.softmax(tf.matmul(X,W) + b)

モデルを訓練するときの重要なポイントは、コスト関数です。 予測yと目標値Yに基づいて、クロスエントロピー誤差関数を使用します。

cross_entropy = tf.reduce_mean(-tf.reduce_sum(Y * tf.log(y), reduction_indices=[1]))

パラメータの精度を計算します。

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(Y,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

勾配降下法を使用してモデルを訓練します。

train_model = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy)

Tensorflowでセッションを開始すると、モデルに関連付けられた操作が実行されます。

セッションを作成したら、まず、すべてのTensorflowの変数を初期化する必要があります。初期化するには、セッションのrun()関数を実行します。

run()関数で演算を実行し、訓練データのバッチを作成して反復処理し、最後にモデルの精度を出力します。

with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    
    for epoch in range(training_epochs) :
        batch_count = int(mnist.train.num_examples/batch_size)
        
        for i in range(batch_count):
            batch_x, batch_y = mnist.train.next_batch(batch_size)
            
            sess.run([train_model], feed_dict={X: batch_x, Y: batch_y})
    print "Accuracy: ", accuracy.eval(session = sess ,feed_dict={X: mnist.test.images, Y: mnist.test.labels})

Accuracy: 0.9033

この単純なモデルでは、約90%の精度が出ました。

以下、全体のコードになります。

以前の記事「機械学習初心者のためのMNIST(翻訳)」に、Google本家サイトのドキュメントを翻訳していますので、詳細はそちらもご覧ください。


  1. インストールについては、様々なページで説明されているので、ここでは割愛します

  2. 28*28