第1回:陸遜・法正をAI画像判定(畳み込みニューラルネットワーク)
AIを手軽に導入出来る「MatrixFlow」を使い機械学習を実施。機械学習の実装体験/個人の振り返り用としてnoteに記す。
目的:陸遜と法正の画像を分類したい
機械学習に使用する素材:「はじめての三国志」の陸遜と法正の一部を抜き出したデータを計20枚使用
【内訳:陸遜10枚 & 法正10枚】
ディープランニングは機械学習モデルの画像認識の使用でよく使われる「畳み込みニューラルネットワーク」 (CNN)で処理する
畳み込みニューラルネットワークとは
畳み込みニューラルネットワーク(Convolutional Neural Network: CNNまたはConvNet)とは、何段もの深い層を持つニューラルネットワークで、特に画像認識の分野で優れた性能を発揮しているネットワークです。このネットワークは「畳み込み層」や「プーリング層」などの幾つかの特徴的な機能を持った層を積み上げることで構成され、現在幅広い分野で活用されています。
MatrixFlowのレシピ内でディープラーニングを選択。以下の図のように畳み込みニューラルネットワークを構築
(1) データ入り口(画像)⇛色次元を3に指定
----------------------------------------------
補足:画像データが持つ色の情報
カラー画像→色次元3
白黒画像→色次元0
----------------------------------------------
(2) 二次元畳み込み層 ⇛一般的に利用される活性化関数をReLUを指定
----------------------------------------------
補足:画像とカーネルを重ね合わせて計算。計算結果を特徴マップとして出力される。活性化関数で抽出した特徴をモデルで使うか否かを判定できる
----------------------------------------------
(3) 最大プーリング層
補足:最大プーリング層は、フィルタ内の最大値のみを残して圧縮。画像が縦横に少しズレたとしてもフィルタ内の最大値が変わることはあまりない。この処理を施すことによって位置のズレを防止し強い処理を行うことができる。これがCNNが画像処理で用いられる理由
----------------------------------------------
(4) 一次元化
補足:今まで出来上がった処理の特徴マップを一次元化に変換するための処理。(5)につなげる「全結合層」は一次元の計算しかできない。(5)の処理を挟む前に複数の持っていたデータを一元化を行う必要がある
----------------------------------------------
(5) 全結合層
補足:抽出された特徴をもとに、実際に判定を行う層。(5)と(6)に2つの全結合層を構築。上側全結合層の出力サイズを64、活性化関数はReLU。下側全結合層の出力サイズを2に指定、同じく活性化関数はReLU。下側全結合層で「法正」か「陸遜」を判断する
----------------------------------------------
設計したAIに学習用データを使って学習開始
学習率:0.0001
バッチサイズ:64
エポック:15
学習回数:4
評価間隔(学習データ):1
評価間隔(テストデータ):1
学習結果
学習時間: 10秒
train_loss(紫色)は学習に使ったデータを評価した時の損失関数の値。損失関数とは正解との指数を表す図で、右側に向かって数値が小さくなるほど学習がうまくいっている証拠。
train_accuracy(紫色)は学習に使ったデータで、どれだけ正解できたかの割合。
右側に向かってtrain_accuracy(紫色)が上がっていくと正解率が高くなる。
推論結果
推論結果:20枚中10枚正解(train_accuracy:約50%)
若干、train_accuracyと推論結果に差が生じている?
画像認識の精度が低い理由
画像認識の精度が低い原因としては以下が考えられる。
・学習用のデータが少ない
・過学習
(学習データのみに最適化されてしまい、汎化性能に陥っている状態)
過学習の確認
過学習をしていないか確認が必要
手順:
⇛学習に使っていない画像データでも損失関数と正答数の確認が必要
※ test_loss と test_accuracyの指標が小さくなっていれば、今回学習用に使用した画像20枚だけではなく、他の画像に対しても良い精度でAIの予測が期待できる。第2回では、過学習から抜け出すことを目標にする。