CNNモデルが他のすべてのクラスから1つのクラスだけを予測することがあるのはなぜですか?

Jan 18 2021

私はディープラーニングの世界に比較的慣れていないので、Redditほど意地悪にならないでください!一般的な質問のように思われるので、必要ではないと思われるため、ここではコードを示しません(必要な場合は、ここにcolabへのリンクがあります)

データについて少し:元のデータはここにあります。これは、82GBの元のデータセットの縮小バージョンです。

これについてCNNをトレーニングすると、毎回「糖尿病性網膜症なし」(DRなし)と予測され、73%の精度が得られます。これは、膨大な量のDRイメージがないなどの理由によるものですか?何も思いつきません!私が予測のために持っている5つのクラスは["Mild", "Moderate", "No DR", "Proliferative DR", "Severe"]です。

それはおそらくただの悪いコードです、あなたたちが助けることができることを望んでいました

回答

1 Ivan Jan 18 2021 at 00:21

私はコメントしようとしていました:

より厳密なアプローチは、データセットのバランスの測定を開始することです。各クラスの画像はいくつありますか?これはおそらくあなたの質問への答えを与えるでしょう。

しかし、あなたが与えたリンクを自分で見るのは仕方がありませんでした。Kaggleはすでにデータセットの概要を示しています。

クイック計算:25,812 / 35,126 * 100 = 73%。それは興味深いです、あなたはあなたがの精度を持っていると言いました74%。あなたのモデルは不均衡なデータセットで学習しており、最初のクラスが過剰に表現されているため、25k/35k膨大です。私の仮説は、モデルが最初のクラスを予測し続けるということです。つまり、平均して、の精度が得られ74%ます。

あなたがすべきことはあなたのデータセットのバランスを取ることです。たとえば35,126 - 25,810 = 9,316、最初のクラスの例のみをエポック中に表示できるようにします。さらに良いことに、各クラスがエポックごとにn回だけ表示されるように、すべてのクラスにわたってデータセットのバランスを取ります。

2 Shai Jan 18 2021 at 04:30

Ivanがすでに述べたように、クラスの不均衡の問題があります。これは、次の方法で解決できます。

  1. オンラインハードネガティブマイニング:損失を計算した後の各反復で、「DRなし」クラスに属するバッチ内のすべての要素を並べ替えて、最悪のものだけを保持できkます。次に、これらのより悪いkのみを使用して勾配を推定し、残りをすべて破棄します。
    例を参照してください:
    Abhinav Shrivastava、Abhinav Gupta、Ross Girshick トレーニング地域ベースのオブジェクト検出器とオンラインハードサンプルマイニング(CVPR 2016)

  2. 焦点損失:「バニラ」クロスエントロピー損失の修正を使用して、クラスの不均衡に取り組むことができます。


関連記事これとこれ。