背景・目的
機械学習初心者が、畳み込みネットワークを理解するために、手書き数字画像データセット(MNIST)を用いてデータ拡張の効果を調べてみたので、備忘録として結果を保存する。
結果
・学習用データが十分にあるときはデータ拡張を行わなくてもそれなりの精度が出た。
・学習用データが少なすぎるとデータ拡張の効果が見られなかった。
・学習データ数210にてデータ拡張を行うと精度(Accuracy)が改善された。
※精度(Accuracy)はホールドアウトにて検証。
※学習データ数37800の精度はデータ拡張なしで 0.9912。
※赤→緑→青の順に試行錯誤しながらデータを取得したので、データ拡張以外にも学習方法等に若干の違いがある。
※学習epochはバリデーション精度がなんとなく安定するまで実施。感覚的にはデータ拡張やドロップアウトを行わない場合、epoch数を増やしても過学習をするのでバリデーション精度が頭打ちになる。データ拡張やドロップアウトをおこなう場合は過学習が防がれてepoch数をバリデーション精度が頭打ちにならない。
データ拡張パラメータ
データ拡張はKeras.keras.preprocessing.image.ImageDataGeneratorで行った。
緑データ時のデータ拡張のパラメータ
ImageDataGenerator(rotation_range=5, width_shift_range=0.05, height_shift_range=0.05, zoom_range=0.05, shear_range=0.1)
青データ時のデータ拡張のパラメータ(緑のときよりもふり幅大)
ImageDataGenerator(rotation_range=30, width_shift_range=0.2, height_shift_range=0.2, zoom_range=0.2, shear_range=0.2)
実験に用いたニューラルネットワークの構造
実験には以下の構造の畳込ニューラルネットワーク ( CNN ) を使用。
参考情報
機械学習で便利な画像データセット「MNIST」を丁寧に解説!
人工知能に関する断創録 Kerasによるデータ拡張
Deep Neural Network Keras way