畳み込みニューラルネットワークでのFashion-MNISTの学習をひたすら廻してみた結果
前回の記事
Fashion-MNISTを畳み込みニューラルネットワークで判定する簡単サンプル - 人工知能プログラミングやってくブログ
に対して
「val_lossがまだ0.2もあるんだから、もっと学習回せば正答率あがんじゃないの?」
という意見をもらったんで、
「じゃ、試しにやってみるか」
と徹底的に学習を回してみました。
その結果を発表します。
学習コード
kerasのexampleに入ってるmnist_cnn.pyをベースにちょっと書き換えたもの。
次のような変更がされている。
- MNISTではなくてFashion-MNISTのデータから学習する(当然)
- 引数で学習回数(epochs)を指定できるようにした
- 学習ログをcsvで出力する
学習回数 12エポック
前回の記事で「コスパ的にこの学習回数がベストっぽい」という結論に一回なった12エポックの学習グラフ。
val_accの最大値は、0.9236。
学習回数 24エポック
val_accの最大値は、0.9325。 val_lossも上がってないし、成績的にはこっちの方がちょっと良くなってるから、これも良い。
学習回数 64エポック
すでにval_lossが上がってきてて過学習の傾向が見られる。
val_accの最大値は、0.9371。
学習回数 128エポック
まぁval_loss上がっちゃってますね。
val_accの最大値は、0.9343。
学習回数 256エポック
val_accの最大値は、0.9383。
学習回数 512エポック
val_accの最大値は、0.9381。
学習回数 1024エポック
val_accの最大値は、0.9378。
学習回数 2048エポック
val_accの最大値は、0.9364。
val_lossは0.6近くまで上がってきてて、激しく過学習気味。
学習回数に関する総評
結果から考えるに、このニューラルネットワークの構造でFashion-MNISTを学習したとき、93%くらいの正答率しか出ないということだろう。
データとニューラルネット構造の兼ね合いで、だいたい出るであろう最大の成績は決まっていて、割と早い段階でその数値には達してしまうと考えて良いのだろうと思う。
そして、その段階に到達してしまった後はマシンパワーを使って学習を回してもval_lossが上がって過学習になってしまい、電力の無駄遣いにしかならないということのようだ。
例外もあるかもしれないけど、今回の実験結果からは、そのように考えられる。
GitHubリポジトリ
こちら。
今回、学習してできたモデルのバイナリも入ってます。
Googleスプレッドシート
学習グラフの数値の元データが入っているGoogleスプレッドシートがコチラ。
drive.google.com
参考
stackoverflow.com KerasのトレーニングログをCSV形式で保存するやり方が書いてあるよ。
Fashion-MNISTを畳み込みニューラルネットワークで判定する簡単サンプル
「Fashion-MNISTは、MNISTとほぼ同じで画像ファイルが違うだけだから、MNISTの畳み込みニューラルネットワークで判定できるだろうな」
とは思ったんですが、一応確認のためにやってみました。
Fashion-MNISTをCNNで学習しモデルを保存
Kerasのエグザンプルに入っているmnist_cnn.pyをちょっと書き換えて作りました。
python fashion-mnist_cnn_train.py
実行すると学習が行われます。
学習したモデルを読み込んでFashion-MNIST画像を認識させるコード
jupyter notebookで使えます。
GitHubリポジトリ
ここに学習したモデル込みのコードを置きました。
学習回数に関する考察
12エポック回したモデルと24エポック回したモデルの二つをgithubのリポジトリに入れときました。 元にしたKerasのサンプル、mnist_cnn.py に元々書いてあったのは12エポック。 一応、倍回してみたらどんなもんだろうな?と24エポックも回して見ました。
学習時に出力されたloss, acc, val_loss, val_acc を表にまとめたのが次のもの。
で、注目すべきは学習後、テストした結果の成績であるval_lossとval_acc。
12エポックと24エポックの比較グラフが次のもの。
12エポックも24エポックもval_loss、val_accとも似たような値なので、12エポックがほぼ適正な学習回数のようだ。
KerasデータセットのCIFAR-100画像とクラス名を表示する簡単サンプル
CIFAR-10画像の表示を作ったついでに、CIFAR-100画像の表示も作っておこうかと作りました。
CIFAR-100とは
一般物体認識のベンチマークとしてよく使われている画像データセット。
特徴
- 画像サイズは32ピクセルx32ピクセル
- 全部で60000枚
- 50000枚(各クラス5000枚)の訓練画像と10000枚(各クラス1000枚)のテスト画像に分割されている
- クラスラベルは100クラスあり、それぞれ600枚づつ画像がある。
- クラスラベルはスーパークラス20個とクラス100個。 詳細は下記。
スーパークラス | クラス |
---|---|
海洋哺乳類 | ビーバー, イルカ, カワウソ, アザラシ, 鯨 |
魚類 | 観賞魚, カレイ, エイ, サメ, マス |
花 | ラン, ひなげし, バラ, ヒマワリ, チューリップ |
食品容器 | ボトル, ボウル, カン, カップ, プレート |
果物と野菜 | リンゴ, キノコ, オレンジ, ナシ, ピーマン |
家庭用電気機器 | 時計, コンピュータ・キーボード, ランプ, 電話, テレビ |
家庭用家具 | ベッド, 椅子, ソファー, テーブル, タンス |
昆虫 | 蜂, カブトムシ, 蝶, 蝶等の幼虫, ゴキブリ |
大きな肉食獣 | クマ, ヒョウ, ライオン, 虎, 狼 |
大きな人造の屋外物 | 橋, 城, 家, 道, 超高層ビル |
大きな自然野外シーン | 雲, 森, 山, 平野, 海 |
大きな雑食動物と草食動物 | ラクダ, 牛, チンパンジー, 象, カンガルー |
中位の哺乳類 | キツネ, ヤマアラシ, オポッサム, アライグマ, スカンク |
昆虫でない無脊椎動物 | カニ, ロブスター, カタツムリ, クモ, ワーム |
人々 | 赤ちゃん, 少年, 少女, 男性, 女性 |
爬虫類 | ワニ, 恐竜, トカゲ, ヘビ, 亀 |
小哺乳類 | ハムスター, マウス, ウサギ, トガリネズミ, リス |
木 | カエデ, オーク, ヤシ, 松, 柳 |
乗り物 1 | 自転車, バス, オートバイ, ピックアップトラック, 電車 |
乗り物 2 | 芝刈り機, ロケット, 市街電車, タンク, トラクタ |
CIFAR-100の画像とクラス名を表示するソースコード
jupyter notebook
でjupyter notebookを起動してから使ってください。
参考
次のサイトを参考にさせていただきました。
感謝!!
tensorflow.classcat.com
CIFAR-100のクラス分類が一通り日本語でのってる!
corochann.com CIFAR-100の100個のクラス名の配列がのってて素晴らしい!
KerasデータセットのFashion-MNIST(ファッションMNIST)を表示する簡単サンプル
「お、こんなデータセットあるんだ!?」
とKerasのドキュメント読んでて知ったファッションMNIST。
知らなかったんで表示するコードをpythonで書いてみました。
Fashion-MNISTとは
ファッションの白黒画像を集めたデータセットで、MNISTのファッション版。
Zalandoの靴、服、鞄の画像データセットである。
特徴
- 画像サイズは28ピクセルx28ピクセル
- グレースケール画像
- 訓練用画像60000枚、テスト用画像10000枚
- クラスラベルは次の10クラス
- [0] T-shirt/top(Tシャツ/トップス)
- [1] Trouser(ズボン)
- [2] Pullover(プルオーバー)
- [3] Dress(ドレス)
- [4] Coat(コート)
- [5] Sandal(サンダル)
- [6] Shirt(シャツ)
- [7] Sneaker(スニーカー)
- [8] Bag(バッグ)
- [9] Ankle boot(アンクルブーツ)
Fashion-MNISTの画像とラベルを表示するソースコード
jupyter notebook
でjupyter notebookを起動してから使ってください。
参考
次のサイトを参考にさせていただきました!
多謝!
http://tensorflow.classcat.com/category/fashion-mnist/
qiita.com 15位にFashion-MNISTが選ばれている。
jobs.zalando.com Fashion-MNISTの作成元。
CIFAR-10画像のラベル予測を一つ一つ表示する簡単サンプル
画像ラベル予測をまとめて実行した結果の成績は良くサンプルコードで目にしますが、一つ一つの結果とどれを間違ったのかがよくわからないので作ってみました。
認識を間違った部分が赤文字で表示され、左にハズレの予測ラベル、右に正解のラベルが表示されます。
主要部分のソースコード
jupyter notebookを使っていますので
jupyter notebook
を実行してから使ってください。
GitHubリポジトリ
github.com 予測に使用しているモデルファイルは、こちらに含まれています。
KerasデータセットのCIFAR-10画像とラベルを表示する簡単コード
CIFAR-10サンプルの学習は回して見ても、データの中身はちゃんと見てなかったので作って見ました。
jupyter notebookを使用して作りました。
CIFAR-10とは
一般物体認識のベンチマークとしてよく使われている画像データセット。
特徴
- 画像サイズは32ピクセルx32ピクセル
- 全部で60000枚
- 50000枚(各クラス5000枚)の訓練画像と10000枚(各クラス1000枚)のテスト画像に分割されている
- 80 million tiny imagesのサブセット
- クラスラベルは次の10クラス
- [0] airplane (飛行機)
- [1] automobile (自動車)
- [2] bird (鳥)
- [3] cat (猫)
- [4] deer (鹿)
- [5] dog (犬)
- [6] frog (カエル)
- [7] horse (馬)
- [8] ship (船)
- [9] truck (トラック)
CIFAR-10の画像とラベルを表示する
jupyter notebook
でjupyter notebookを起動してから使ってね。
kerasではCIFAR-10のラベル名を取得する方法がないっぽい
keras作者のfchollet氏も「CIFAR-10のサイト見ろよ」って言ってるから、そういうことっぽい。 github.com
参考
次のサイトを参考にさせていただきました。
感謝!!
aidiary.hatenablog.com "CIFAR-10とは"と"特徴"の部分を引用させてもらいました。
ブラウザに手書きした数字をMNISTから深層学習したモデルで判定する簡単コード
自分で書いた数字を、畳み込みニューラルネットワークでMNISTを学習したモデルで認識してみたかったんで作ってみましたよ。
Jupyter notebookでやってます。
Python 3以降。
深層学習ライブラリは、いつもどおりKeras。
ソースコード
GitHub
github.com 学習済みのバイナリも簡単に入手できた方が良いだろうなと思ったので、リポジトリ作りました。
参考
blog.sky-net.pw
このコードを大変参考にさせていただきました!
ありがとうございます!