この記事では、AIを作ってみよう:画像分類DNN(1/3) に続き、AIを実際に作っていきます。
プログラムのコピペ
それでは、さっそくAIを作ってしまいましょう。説明は後回しです、コピペしてしまってください。
下のプログラムをコピーして、自分のPCのデスクトップへファイルとして保存してください。Pythonプログラムは通常 .py という拡張子を付けます。
コピペについてもう少し詳しい手順はこちら。
- 下のプログラム(データ)をマウスでなぞって全部選択します。
- 右クリック→コピーを実行します。
- メモ帳を開いて、右クリック→ペーストを実行します。
- メモ帳のファイル→保存を実行します。
- 場所はデスクトップとし、ファイル名に一番上に書かれた名前(dnn_mnist.py)を書いて保存します。
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import os import keras.utils from keras.datasets import mnist from keras.models import Sequential from keras.layers import InputLayer,Dense, Dropout from keras.optimizers import RMSprop from numpy import argmax NUM_CLASSES = 10 EPOCHS = 20 BATCH_SIZE = 128 PREDICT_NUM = 5 MODELFILE = 'model_dnn_mnist.h5' # load mnist & split & shuffle (feature_train, label_train), (feature_test, label_test) = mnist.load_data() feature_train = feature_train.reshape(60000, 784) # 2dim28*28 to 1dim784 feature_test = feature_test.reshape(10000, 784) feature_train = feature_train.astype('float32') # int to float32 feature_test = feature_test.astype('float32') feature_train /= 255 # [0-255] to [0.0-1.0] feature_test /= 255 # convert class vectors to binary class matrices label_train = keras.utils.to_categorical(label_train, NUM_CLASSES) label_test = keras.utils.to_categorical(label_test, NUM_CLASSES) model = Sequential() model.add(InputLayer(input_shape=(784,))) model.add(Dense(512, activation='relu')) model.add(Dense(10, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.summary() # train if not os.path.exists(MODELFILE): history = model.fit(feature_train, label_train, batch_size=BATCH_SIZE, epochs=EPOCHS, verbose=1, validation_data=(feature_test, label_test)) print('Train done.') model.save_weights(MODELFILE) print('Train saved.') else: # load model model.load_weights(MODELFILE) print('Train loaded.') # predict predicted = model.predict(feature_test) for n in range(PREDICT_NUM): print('predict = ', argmax(predicted[n])) print('label = ', argmax(label_test[n])) print('') |
保存できたでしょうか。
プログラムの詳しい解説は次の記事に書きます。できるだけ簡単な解説にしましたので、後で初心者の人も見てみてください。
実行
プログラムが保存できたら、下記のように実行します。
- コマンド入力ウィンドウを開きます。
Windowsの場合:スタートボタンを押す → メニューが出たらそのまま「cmd」と打ち「Enter」。
Macintoshの場合:「ターミナル」を実行します。 - 3ファイルを保存した場所に移動します。デスクトップであれば
Win,Macどちらも「cd desktop」と打ち「Enter」です。 - AIの学習を実行します。
「python dnn_mnist.py」と打ち「Enter」。 - MNISTデータのダウンロードと学習が始まり10分程度待ちます。終わると学習済みモデルファイル「model_dnn_mnist.h5」が保存されます。これで何度も学習する必要がなくなります。
- 最後にテスト画像を予測した結果が出ます。
画像は見えませんが、ランダムに選ばれた0~9の手書き画像を読み込み予測、を5回繰り返します。
predict = ... 予測した数字です。
label = ... こちらが正解です。上と合っていれば正しく予測したことになります。
いかがでしょうか。
ほぼ正解しているのではないでしょうか。
6万枚もの画像を学習しているので精度はいいはずですね。
今回は小さな画像を扱ったのでDNNモデルで済みましたが、大きな画像やカラーになってくるとCNNモデルが必要になってきます。
次の記事では、プログラムを簡単に解説します。