MNISTデータセットで数字画像認識 | 基本的なCNNサンプルコード – Colaboratory・Keras・MNIST
Google ColaboratoryでKerasを使ってMNISTの数字画像認識用に、ディープラーニング(深層学習)でおなじみの「畳み込みニューラルネットワーク」(CNN:Convolutional Neural Network)を構築してみました。
* Keras:Pythonで書かれているTensorFlow上などで実行可能な高水準のニューラルネットワークライブラリ
「 まだ、機械学習プログラミングについて、よくわからないけどとりあえず自分で動かしてみたい!」
と考えている方の参考になることがありましたら幸いです。
今回のサンプルコードは、プログラムの内容についてあまり解説をしていませんが、今後、解説版も動画などで公開予定です。
お楽しみに♪
【変更情報:2021年10月13日】
「from keras.optimizers import Adam」「keras.utils.to_categorical」のところのエラーを修正しました。
【情報】
解説記事を作成しました。コードの理解にお役立てください。
:【コード解説】畳み込みニューラルネットワーク(CNN)サンプルコード – Colaboratory・Keras・MNIST
この記事のサンプルコードを理解するために必要な画像認識関連の深層学習プログラミングの知識を学ぶ上で補助教材となりそうな書籍をレビューしておきました。日々の学習の一助になることがありましたら幸いです。
:【1周目 – 学習レビュー】Pythonで動かして学ぶ!あたらしい深層学習の教科書 機械学習の基本から深層学習まで(Aidemy公式教科書)
今回のプログラムをWebアプリ化する方法はこちら
:【サンプルコード】MNIST編 Flask(Python)Web機械学習アプリ開発入門:画像アップロード判定プログラム
日本語コード解説も公開しました。
:【コード解説】Keras・MNIST編:Flask(Python)Web機械学習アプリ開発入門 – 画像アップロード判定プログラム
オリジナルデータセット編のFlask(Python)Web機械学習アプリ開発サンプルコードの日本語解説も公開しました。
:【コード解説】自作画像認識編 Flask(Python)Web機械学習アプリ開発入門:画像アップロード判定プログラム New♪
人工知能(AI)プログラミング用サンプルコード・サンプルソース
実行環境 – Google Colaboratory
Google Colaboratory用のサンプルコードリンク
Google Colaboratoryで公開中のサンプルコードのページへ
:program-Keras-cnn-basic.ipynb | Google Colaboratory共有リンク
【とりあえず動かすサンプルコード】CNN:畳み込みニューラルネットワーク(解説なし版:動画)
視聴時間:56秒
サンプルコードの動かし方がわからない方は、参考にしてみてください。
Google Colaboratoryでプログラムを実行する際には、Googleアカウントが必要です。GPUも無料で使えるのでありがたいですね。
***以下:サンプルコード***
#ライブラリのインポートなど
import keras
from keras.datasets import mnist
from keras.utils import np_utils #「keras.utils.to_categorical」のところでエラーとなるので追加
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Dense, Dropout, Flatten
#from keras.optimizers import Adam # ここでエラーとなるので以下のコードに変更
from tensorflow.keras.optimizers import Adam # 「tensorflow.」を追加
import time
#画像データの読み込みと、データ形式の設定・正規化
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
x_train = x_train.astype('float32')/255
x_test = x_test.astype('float32')/255
#ラベルデータをOne-hotベクトルに変更
#y_train = keras.utils.to_categorical(y_train, 10) # エラーとなるのでコメントアウト
#y_test = keras.utils.to_categorical(y_test, 10) # エラーとなるのでコメントアウト
y_train = np_utils.to_categorical(y_train, 10) # 上記のコードでエラーとなるので変更
y_test = np_utils.to_categorical(y_test, 10) # 上記のコードでエラーとなるので変更
#機械学習(人工知能)モデルの作成
#「Conv2D」を使ってディープラーニング技術でおなじみの「畳み込みニューラルネットワーク」(CNN)を実装
model = Sequential()
model.add(Conv2D(16, (3, 3), padding='same',
input_shape=(28, 28, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(Conv2D(256, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(10, activation='softmax'))
#損失関数・最適化関数・評価関数などを指定してモデルをコンパイル
model.compile(loss='categorical_crossentropy',
optimizer=Adam(),
metrics=['accuracy'])
#処理を始めた時間
start_time = time.time()
#学習の実行
history = model.fit(x_train, y_train, batch_size=1024, epochs=20,
verbose=1, validation_data=(x_test, y_test))
#モデルの評価
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
print('Computation time:{0:.3f} sec'.format(time.time() - start_time))
***終わり:サンプルコード***
Webアプリ化に挑戦
:【コード解説】Keras・MNIST編:Flask(Python)Web機械学習アプリ開発入門 – 画像アップロード判定プログラム
:【コード解説】自作画像認識編 Flask(Python)Web機械学習アプリ開発入門:画像アップロード判定プログラム