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と間違えたようです。

なるほどなるほど。

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

 

それではまた。

その他のDeepLearning記事はこちらから

あなたにオススメの記事

コメント

  1. アバター
    • 井上 英耶
    • 2019年 3月 11日

    いつも勉強させていただいています。

    初心者の質問で大変恐縮ですが、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. アバター
    • 管理人の清水です。
    • 2019年 3月 11日

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

    • アバター
      • 井上 英耶
      • 2019年 3月 12日

      清水様

      ありがとうございます。

      無事できました。

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

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

  3. アバター
    • 井上 英耶
    • 2019年 3月 13日

    清水 様

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

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

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

     コードの最後に、

    test loss 0.017122555635650513
    test acc 0.99640522875817

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

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

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

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

    • アバター
      • 清水
      • 2019年 3月 15日

      井上さん

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

      • アバター
        • 井上 英耶
        • 2019年 3月 17日

        清水様

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

        式等勉強します。

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

      • アバター
        • 井上 英耶
        • 2019年 3月 20日

         清水様

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

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

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

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

  1. この記事へのトラックバックはありません。

PAGE TOP