Kerasでのディープラーニングを使用したMNISTの手書き文字認識
Kerasでのディープラーニングを使用したMNISTの手書き文字認識を行ってみます。
MNISTは28×28ピクセルのグレースケール画像で0~9の手書き数字があります。60000個の訓練用の画像と10000個のテスト用の画像から構成されています。
以前、ディープラーニングを使用しない機械学習で約92%の正答率を出しているので、ディープラーニングを用いることで文字認識精度がどのくらい向上するか見てみます。
ソースコード
今回作成したKerasでのディープラーニングを使用したソースコードです。
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 32 33 34 35 36 37 38 39 40 41 42 |
#Kerasのインポート import keras print(keras.__version__) #MNISTのデータをインポート from keras.datasets import mnist (X_train , Y_train ), (X_test, Y_test) = mnist.load_data() #訓練用データの表示 print(X_train.shape) print(Y_train) #テスト用データの表示 print(X_test.shape) print(Y_test) # 特徴量の正規化 X_train = X_train.reshape((60000, 28 * 28)) X_train = X_train.astype('float32') / 255 X_test = X_test.reshape((10000, 28 * 28)) X_test = X_test.astype('float32') / 255 # モデルの構築 from keras.models import Sequential model = keras.models.Sequential() model.add(Dense(units=512,input_dim=28*28)) model.add(Activation('relu')) model.add(Dense(units=10)) model.add(Activation('softmax')) model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=['accuracy']) #教師あり学習の実行 model.fit(X_train,Y_train,epochs=100) #テスト用データの評価 test_loss, test_acc = model.evaluate(X_test, Y_test) #正答率の表示 print('test_acc:', test_acc) |
ソースコードの詳細
Kerasのインポート
1 2 3 |
#Kerasのインポート import keras print(keras.__version__) |
1 2 |
Using TensorFlow backend. 2.1.6 |
Kerasのインポートを行っています。既にKerasがインポートされている場合は不要です。keras.__version__と指定することでバージョンを表示することが出来ます。
MNISTのデータをインポート
1 2 3 4 |
#MNISTのデータをインポート from keras.datasets import mnist (X_train , Y_train ), (X_test, Y_test) = mnist.load_data() |
訓練用データの表示
1 2 3 |
#訓練用データの表示 print(X_train.shape) print(Y_train) |
1 2 |
(60000, 28, 28) [5 0 4 ... 5 6 8] |
テスト用データの表示
1 2 3 |
#テスト用データの表示 print(X_test.shape) print(Y_test) |
1 2 |
(10000, 28, 28) [7 2 1 ... 4 5 6] |
特徴量の正規化
1 2 3 4 5 6 |
# 特徴量の正規化 X_train = X_train.reshape((60000, 28 * 28)) X_train = X_train.astype('float32') / 255 X_test = X_test.reshape((10000, 28 * 28)) X_test = X_test.astype('float32') / 255 |
モデルの構築
1 2 3 4 5 6 7 8 9 |
# モデルの構築 from keras.models import Sequential model = keras.models.Sequential() model.add(Dense(units=512,input_dim=28*28)) model.add(Activation('relu')) model.add(Dense(units=10)) model.add(Activation('softmax')) model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=['accuracy']) |
1行目:レイヤーの線形スタックであるSequentialモデルを適用します
2行目:中間層が512個、入力層が28*28個のニューロンを指定します
3行目:中間層の活性化関数にReLU関数を適用します
4行目:出力層を10個にします
5行目:出力層の活性化関数にsoftmax関数を適用します
6行目:compileでモデルを構築します。
教師あり学習の実行
1 2 |
#教師あり学習の実行 model.fit(X_train,Y_train,epochs=100) |
テスト用データの評価
1 2 |
#テスト用データの評価 test_loss, test_acc = model.evaluate(X_test, Y_test) |
正答率の表示
1 2 |
#正答率の表示 print('test_acc:', test_acc) |
1 |
test_acc: 0.9806 |