人工知能と競プロやってくブログ

深層学習・機械学習・AI・atcoder・競技プログラミングについて調べてやってみたことをまとめるブログです

畳み込みニューラルネットワークでのFashion-MNISTの学習をひたすら廻してみた結果

f:id:uchidamax:20180129020710p:plain
前回の記事
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リポジトリ

github.com

こちら。
今回、学習してできたモデルのバイナリも入ってます。

Googleスプレッドシート

学習グラフの数値の元データが入っているGoogleスプレッドシートがコチラ。
drive.google.com

drive.google.com

参考

stackoverflow.com KerasのトレーニングログをCSV形式で保存するやり方が書いてあるよ。

Fashion-MNISTを畳み込みニューラルネットワークで判定する簡単サンプル

https://gyazo.com/0fb719497a8b66ad998d1235af27d901 「Fashion-MNISTは、MNISTとほぼ同じで画像ファイルが違うだけだから、MNISTの畳み込みニューラルネットワークで判定できるだろうな」
とは思ったんですが、一応確認のためにやってみました。

Fashion-MNISTをCNNで学習しモデルを保存

Kerasのエグザンプルに入っているmnist_cnn.pyをちょっと書き換えて作りました。

python fashion-mnist_cnn_train.py

実行すると学習が行われます。

学習したモデルを読み込んでFashion-MNIST画像を認識させるコード

jupyter notebookで使えます。

GitHubリポジトリ

github.com

ここに学習したモデル込みのコードを置きました。

学習回数に関する考察

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画像とクラス名を表示する簡単サンプル

f:id:uchidamax:20180116114500p:plain 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 Documentation

KerasデータセットのFashion-MNIST(ファッションMNIST)を表示する簡単サンプル

https://gyazo.com/89d86d31ed5558897ecb1caef98ba156

「お、こんなデータセットあるんだ!?」
と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/

データセット - Keras Documentation

qiita.com 15位にFashion-MNISTが選ばれている。

jobs.zalando.com Fashion-MNISTの作成元。

CIFAR-10画像のラベル予測を一つ一つ表示する簡単サンプル

https://gyazo.com/b209037ac23ee815069ca28214db0669

画像ラベル予測をまとめて実行した結果の成績は良くサンプルコードで目にしますが、一つ一つの結果とどれを間違ったのかがよくわからないので作ってみました。
認識を間違った部分が赤文字で表示され、左にハズレの予測ラベル、右に正解のラベルが表示されます。

主要部分のソースコード

jupyter notebookを使っていますので

jupyter notebook 

を実行してから使ってください。

GitHubリポジトリ

github.com 予測に使用しているモデルファイルは、こちらに含まれています。

KerasデータセットのCIFAR-10画像とラベルを表示する簡単コード

https://gyazo.com/3678ceb0abf74ba91f34e8bb37233513

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とは"と"特徴"の部分を引用させてもらいました。

qiita.com

CIFAR-10 and CIFAR-100 datasets

ブラウザに手書きした数字をMNISTから深層学習したモデルで判定する簡単コード

https://gyazo.com/502c143ca80a90c6f00dec88d4c6ce3a
自分で書いた数字を、畳み込みニューラルネットワークでMNISTを学習したモデルで認識してみたかったんで作ってみましたよ。
Jupyter notebookでやってます。
Python 3以降。
深層学習ライブラリは、いつもどおりKeras。

ソースコード

GitHub

github.com 学習済みのバイナリも簡単に入手できた方が良いだろうなと思ったので、リポジトリ作りました。

参考

blog.sky-net.pw このコードを大変参考にさせていただきました!
ありがとうございます!