Tensorflow+Kerasのチュートリアルを動かしてみる
はじめに
前回、Tensorflowをインストールした環境を構築したので、チュートリアルを動かしてみます。
ソースコード
チュートリアルのソースをコピーして動かしてみました。
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
処理の概要
チュートリアルの処理が何をしているか調べてみました。
TensorflowにはMNIST(手書き数字の分類)が内蔵されており、その機能を読み込んでいます。
mnist = tf.keras.datasets.mnist
画像データを読み込んで、各変数に設定しています。
x_train:MINISTのトレーニング用の画像データ
y_train:MINISTのトレーニング用の正解ラベル
x_test:MINISTのテスト用の画像データ
y_test:MINISTのテスト用の正解ラベル
(x_train, y_train),(x_test, y_test) = mnist.load_data()
画像データは0~255までの数字が入っており、そのままだと扱いにくいので255で割って、0~1に値にしています。(正則化)
x_train, x_test = x_train / 255.0, x_test / 255.0
Sequentialに層を積み重ねていきます。
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
MNISTの画像データは28×28のデータが入っており、それを784の平らなデータにしています。
tf.keras.layers.Flatten()
中間層のノードを512に設定しています。(中間層をいくつにするかは難しい問題みたいですが、このチュートリアルでは512になっています。)
activation(活性化関数)にreluを指定しています。
tf.keras.layers.Dense(512, activation=tf.nn.relu)
20%のデータを取り除きます。過学習を防ぐ意味があるようです。
tf.keras.layers.Dropout(0.2)
MNISTは0~9までの手書き数字の分類なので、10個の出力層を定義しています。
activation(活性化関数)にsoftmaxを指定しています。
softmaxを使うと、0~9のそれぞれの数字の確率を計算してくれます。
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
model.compileでモデルを定義します。ここでいうモデルは計算式という理解で良いと思います。
optimizer=’adam’:adamという最適化アルゴリズムを指定しています。
loss=’sparse_categorical_crossentropy’:sparse_categorical_crossentropyという損失関数を指定しています。
metrics=['accuracy’]:評価項目を設定します。ここでは分類の精度を評価項目に設定しています。
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fitで学習を実行しています。epochs=5は学習を5回実行するという意味です。
model.fit(x_train, y_train, epochs=5)
実行すると、以下のような結果になりました。
loss:推定値と正解の誤差
acc:正解率(正しく分類できた確率)
Epoch 1/5
60000/60000 [==============================] - 14s 234us/step - loss: 0.2034 - acc: 0.9407
Epoch 2/5
60000/60000 [==============================] - 13s 211us/step - loss: 0.0808 - acc: 0.9753
Epoch 3/5
60000/60000 [==============================] - 13s 213us/step - loss: 0.0528 - acc: 0.9834
Epoch 4/5
60000/60000 [==============================] - 13s 210us/step - loss: 0.0372 - acc: 0.9879
Epoch 5/5
60000/60000 [==============================] - 13s 215us/step - loss: 0.0285 - acc: 0.9906
テスト用データでどれくらいの精度で分類できるかを実行します。
model.evaluate(x_test, y_test)
実行
以下のような結果になりました。
[0.06659783991681179, 0.9802]
補足
VS Codeでmodel.evaluateの結果を見るためには、以下のようにする必要がありました。
loss, accuracy = model.evaluate(x_test, y_test)
print("accuracy = {:.4f}".format(accuracy))
ディスカッション
コメント一覧
まだ、コメントがありません