MNISTやCIFAR-10でモデル評価時に間違った画像を確認する方法

MNISTやCIFAR-10でモデル評価時に間違った画像を確認する方法

間違った画像を確認してみよう

こんにちは。

AI coordinatorの清水秀樹です。

以前からモデル評価時に間違った画像を確認してみたいと思っていたため、今回改めて実装してみました。

間違った画像を確認する方法を紹介しているサイトが見つからなかったので、実装に結構苦労しました。

(単純に筆者のスキルが無いだけですが・・・)

 

興味がある方は、ぜひ試してみてください。

MNISTで間違った画像を確認する方法

間違った画像を保存するフォルダを作成し、以下のソースを貼り付けるだけで、間違った評価をした画像を確認できるようになります。

 

MNISTソースコードの紹介

以下、ソースコードです。

そのままでも動くと思います。

 

MNISTの結果確認

どんな画像を間違えたか確認してみました。

なんの数字だか分かりますでしょうか?

正解は4です。

学習モデルは6と認識したようです。

 

その他に間違えた画像は以下のような画像がありました。

人間がみても4なのか9なのか、0なのか6なのか判断が難しいものがありますね。

こうやって間違った画像を確認してみると、学習モデルの精度が100%の認識率でないと使えないと思われがちになりますが、そもそも人間の目で確認しても正解が分からないような画像もあるので、100%の認識率でないからダメと見切りをつけるのは早計な気がしますね。

 

CIFAR-10でも試してみよう

続いてCIFAR-10 datesetでも試してみましょう。

こちらはConvolutional Neural Networkで構築した学習モデルで間違った画像を表示してみます。

なのでMNISTで紹介したソースコードとは若干異なります。

間違った画像を抽出するソースコードも多少異なります。

また、折角なので学習モデル図も作成するようにしています。

 

CIFAR-10用のソースコードは以下を参考にしてください。

こちらも、そのままで動くはずです。

 

CIFAR-10の結果確認

それでは間違った画像を確認してみましょう。

今回はepoch=10なので、大した学習精度が出せていない状態での結果確認となります。

間違った画像の一部を紹介すると、

catをfrogと間違えたようです。

airplaneをshipと間違えたようです。

なるほどなるほど。

その他に間違えた画像の一例を載せておきます。

それではまた。

About The Author

Hideki
東京大学発AIスタートアップ企業でロボット開発室室長、画像解析室室長、動画解析室室長を務め、AIエンジニアとしても画像認識関連の特許を在籍中に3つ取得。その後、KDDIグループ内でプロダクトリーダーとして自然言語処理パッケージの自社開発を経て、現在はAGRISTのテックリードとして農業の人手不足の解決に向けた収穫ロボットの開発にチャレンジしている。ロボットは技術の総合格闘技との考え方から、AIだけでなく、ハードやエレキ、通信からクラウド、IOTまで幅広く手掛けることができる。最近では人とロボットの共存を目指すべく、性能だけを追い求める開発から「感動やワクワク体験」をデザインできるロボットの研究を進めており、人とロボットがうまく共存できる世界を作り出したいと日々行動している。

COMMENTS & TRACKBACKS

  • Comments ( 7 )
  • Trackbacks ( 0 )
  1. いつも勉強させていただいています。

    初心者の質問で大変恐縮ですが、MNISTのコードを実行したところ、以下のエラーがでます。

    間違った写真を保存するフォルダをどのような名前で、どこに作成したらいいのでしょうか?

    実行コードがあるファイルに『fname』というフォルダを作成したのですが、ダメでした。

    ご教授いただければ幸いです。
     
    Train on 60000 samples, validate on 10000 samples
    Epoch 1/5
    60000/60000 [==============================] – 5s 79us/step – loss: 0.3839 – acc: 0.8797 – val_loss: 0.1583 – val_acc: 0.9514
    Epoch 2/5
    60000/60000 [==============================] – 4s 70us/step – loss: 0.1414 – acc: 0.9571 – val_loss: 0.0885 – val_acc: 0.9729
    Epoch 3/5
    60000/60000 [==============================] – 4s 72us/step – loss: 0.0915 – acc: 0.9712 – val_loss: 0.0813 – val_acc: 0.9750
    Epoch 4/5
    60000/60000 [==============================] – 4s 69us/step – loss: 0.0684 – acc: 0.9781 – val_loss: 0.0727 – val_acc: 0.9773
    Epoch 5/5
    60000/60000 [==============================] – 4s 70us/step – loss: 0.0532 – acc: 0.9832 – val_loss: 0.0663 – val_acc: 0.9815

    —————————————————————————
    FileNotFoundError Traceback (most recent call last)
    in
    92 dat *= 255
    93 img = Image.fromarray(dat.reshape((28,28))).convert(“RGB”)
    —> 94 img.save(fname)
    95
    96 # モデルの評価を行う

    C:\Anaconda3\envs\tf140\lib\site-packages\PIL\Image.py in save(self, fp, format, **params)
    1989 # Open also for reading (“+”), because TIFF save_all
    1990 # writer needs to go back and edit the written data.
    -> 1991 fp = builtins.open(filename, “w+b”)
    1992
    1993 try:

    FileNotFoundError: [Errno 2] No such file or directory: ‘NG_photo/115-9-ne-4.png’

  2. 管理人の清水です。

    井上さん。
    フォルダ名を「NG_photo」として頂ければ動くかと思います。

    • 清水様

      ありがとうございます。

      無事できました。

      お忙しいところ恐縮です。

      今後とも宜しくお願い致します。

  3. 清水 様

     なんども聞いてしまい大変申し訳ありません。

     清水様のコードのおかげで、間違っている写真を取り出すことができ、大変勉強になっています。

     現在、3種類のプランクトンに対して、各60枚の学習データと各30まいのテストデータに対して評価を行っています。

     コードの最後に、

    test loss 0.017122555635650513
    test acc 0.99640522875817

     と表示され、テストデータの正解率は99.6%と思ったのですが、NG_Photoには5枚の写真が入っていました。

     テストデータは計90枚あったので、そのうち5枚の写真が間違っているなら、Test_accuracyは94.5%になると思うのですが、上述のように99.6%と表示されています。

     この違いはなぜでしょうか?

     ご教授いただければ幸いです。

    • 井上さん

      詳細は私もしっかり調べていないので分かりません。
      epoch数やバッチサイズで式が変わってくるのかと思います。(想像ですが・・・)

      • 清水様

        ご教授ありがとうございます。

        式等勉強します。

        色々ありがとうございます。

      •  清水様

         いつもブログで勉強させていただいています。

         先週質問させていただいた不正解写真の数と、表示されるTest_accuracyの違いですが、CIFAR-10のコードの178行目にX_train, y_trainとなっているのですが、表示には、180, 181行目のように’test_…’となっているのが原因ということが分かりました。

         色々といつもありがとうございます。

         今後も勉強させていただきます。

LEAVE A REPLY

*
*
* (公開されません)