
この記事では、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モデルが必要になってきます。
次の記事では、プログラムを簡単に解説します。
