こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回はTensorFlowとKerasを使って、MNISTの手描き文字認識をやってみましょう。
**********
さて今回はTensorFlowとKerasを使ってMNISTという手描き文字認識をやってみたい。
ちなみにMNISTとは6万件の学習データセットと1万件の評価データセットが含まれており、学習データセットには正解ラベルも付与されている。
手描きで書かれた8という数字には、ラベルとして8が付いているといった具合だ。
このMNISTってやつは、プログラミングのHello worldみたいなもので、機械学習をやると必ず一度は通る道になっている。
さて、Kerasには始めからMNISTのデータセットを読み込み、学習データと評価データに分ける機能も組み込まれている。
そのため、こういったテストの類は非常に使いやすい。
ちなみに、TensorFlowとKerasのインストール方法は、詳しく書かれたサイトがたくさんあるので、
「TensorFlow インストール」 「Keras インストール」などで検索をかけてほしい。
それではインストールしたと仮定して、MNIST認識のコードはこちら。
下記コードを適当な名前で保存して(ここでは test_mnist.py)、python3で実行する。
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 |
from keras.datasets import mnist from keras import models from keras import layers from keras.utils import to_categorical # mnistをトレーニング用とテスト用に分ける (train_images, train_labels), (test_images, test_labels) = mnist.load_data() # セッティング model01 = models.Sequential() model01.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,))) model01.add(layers.Dense(10, activation='softmax')) # コンパイル model01.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy']) # データを扱いやすいように変換する train_images = train_images.reshape((60000, 28 * 28)) train_images = train_images.astype('float32') / 255 test_images = test_images.reshape((10000, 28 * 28)) test_images = test_images.astype('float32') / 255 train_labels = to_categorical(train_labels) test_labels = to_categorical(test_labels) # 訓練開始 model01.fit(train_images, train_labels, epochs=5, batch_size=128) # 評価してみる test_loss, test_acc = model01.evaluate(test_images, test_labels) print('acc:', test_acc) |
ざっくりとしたコメントを書いておいたのでご参考までに。
さて、では実行をしてみよう。
$ python test_mnist.py
(環境によっては、
$ python3 test_mnist.py )
どうでしょう。
$ acc: 0.9761
正解率97パーセント超えなので、まずまずといったところ。
このパーセンテージだと人間を超えた感じですね。
実行時の動画はこちら↓
TensorFlowとKerasのコンビは、kaggleコンペなどでもよく使われているセットなので、この機会にマスターしておきましょう。