SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

少ない学習データと複雑で深いモデルの組合せは最悪!を体験/Neural Network Consoleの使い方

学習データの量が十分でなくて精度があがらない時、複雑なモデルを使ってなんとかしようとしたら、余計ひどい目にあう。

今回は、常識的に言われていることを、実際にやって体感してみました。

f:id:arakan_no_boku:20190326212937j:plain

2019/3/30追加

>これはリライトです。

>バージョンアップの記事が時間がたって陳腐化したので書き換えてみました。 

 

ベースにするのはこの記事

 

カラー画像で少ない学習データでやってみたものです。

arakan-pgm-ai.hatenablog.com

この時は精度がいまいちだったので、次の回で「データを水増しして増やす」方法で改善を試みたのでした。

arakan-pgm-ai.hatenablog.com

 

今回のこころみについて

 

学習データが十分にある時は、より複雑で深いモデルを使うことで精度をあげることができます。

これは、まあ誰でもしってる常識みたいなもの。

だから、学習データが少なくても、もう少し深いモデルを使ったら、多少でも精度が向上するんじゃないか・・と考えたとしてもおかしくないです。

まあ。

ものの本によれば、そういう試みはうまくいかない・・とあります。

理屈的にも納得できる部分はありますし、それはそれでよいのですが、一度も試さないで机上の理論だけで決めつけるのはどうだろうか。

そう思ってやってみることにしたわけです。

 

resnetをつかってみよう

 

resnet18.sdcprojを使います。

deepage.net

ニューラルネットワークコンソールで、上記プロジェクトを開き、適当なフォルダに名前をつけて保存しておきます。

f:id:arakan_no_boku:20190330143507j:plain

 

データセットを付け替える

 

サンプルは「ImageNet」のデータをInputに想定してます。

これを、Caltecのデータに変更する必要があります。

こちらで用意した画像を元に、Create Objectします。

サイズは、ImageNetにあわせて、480×480にReSizeします。

f:id:arakan_no_boku:20190330151225j:plain

これで、トレーニングと評価用の両方のデータセットを登録します。

なお、Validationのデータ数がデフォルトの64より少ない場合は、Configタブで「Batch Size」をデータ数にあわせて変更する必要があります。

 

レイヤーオプションの最低限の変更

 

4つのタブに分かれていますが、それぞれに以下の変更が必要です。

 

その1

一番右下のAffineが「1000」になっているのを「3」(今回は3カテゴリなので)に変更します。

f:id:arakan_no_boku:20190330151732j:plain

 

その2

Validation、Runtime、Validation5のinputのサイズを、3,480,480にあわせます。

f:id:arakan_no_boku:20190330152013j:plain

これで動くはずです。

 

学習・評価してみました

 

正直、とんでもなく時間がかかります。

自分は動かしたまま寝て、翌朝に確認しました。

学習結果グラフはのせません。

予測してたよりひどかったので(笑)

評価の結果だけのせておきます。

f:id:arakan_no_boku:20190330153754j:plain

ひどいもんです。

でも、まあ・・予想通りといえば予測通り。

  • データ量が少ない
  • モデルが複雑

この2つは「過学習」の発生しやすい二大条件です。

その2つがそろったら、こういうことになるんですね。

納得できました。

二度としませんけど(笑)

ではでは。