CNNモデルが他のすべてのクラスから1つのクラスだけを予測することがあるのはなぜですか?
私はディープラーニングの世界に比較的慣れていないので、Redditほど意地悪にならないでください!一般的な質問のように思われるので、必要ではないと思われるため、ここではコードを示しません(必要な場合は、ここにcolabへのリンクがあります)
データについて少し:元のデータはここにあります。これは、82GBの元のデータセットの縮小バージョンです。
これについてCNNをトレーニングすると、毎回「糖尿病性網膜症なし」(DRなし)と予測され、73%の精度が得られます。これは、膨大な量のDRイメージがないなどの理由によるものですか?何も思いつきません!私が予測のために持っている5つのクラスは["Mild", "Moderate", "No DR", "Proliferative DR", "Severe"]
です。
それはおそらくただの悪いコードです、あなたたちが助けることができることを望んでいました
回答
私はコメントしようとしていました:
より厳密なアプローチは、データセットのバランスの測定を開始することです。各クラスの画像はいくつありますか?これはおそらくあなたの質問への答えを与えるでしょう。
しかし、あなたが与えたリンクを自分で見るのは仕方がありませんでした。Kaggleはすでにデータセットの概要を示しています。
クイック計算:25,812 / 35,126 * 100 = 73%
。それは興味深いです、あなたはあなたがの精度を持っていると言いました74%
。あなたのモデルは不均衡なデータセットで学習しており、最初のクラスが過剰に表現されているため、25k/35k
膨大です。私の仮説は、モデルが最初のクラスを予測し続けるということです。つまり、平均して、の精度が得られ74%
ます。
あなたがすべきことはあなたのデータセットのバランスを取ることです。たとえば35,126 - 25,810 = 9,316
、最初のクラスの例のみをエポック中に表示できるようにします。さらに良いことに、各クラスがエポックごとにn回だけ表示されるように、すべてのクラスにわたってデータセットのバランスを取ります。
Ivanがすでに述べたように、クラスの不均衡の問題があります。これは、次の方法で解決できます。
オンラインハードネガティブマイニング:損失を計算した後の各反復で、「DRなし」クラスに属するバッチ内のすべての要素を並べ替えて、最悪のものだけを保持でき
k
ます。次に、これらのより悪いkのみを使用して勾配を推定し、残りをすべて破棄します。
例を参照してください:
Abhinav Shrivastava、Abhinav Gupta、Ross Girshick トレーニング地域ベースのオブジェクト検出器とオンラインハードサンプルマイニング(CVPR 2016)焦点損失:「バニラ」クロスエントロピー損失の修正を使用して、クラスの不均衡に取り組むことができます。
関連記事これとこれ。