1

私は畳み込みニューラルネットワークを訓練して、画像を5つのクラス(クラス1〜クラス5)の1つに分類します。畳み込みニューラルネットワークが歪んだ予測を作成

私はクラス1のトレーニング画像が非常に少ないので、ランダムな作物を取り、画像を反転させてより多くのデータを作成することで、データの増強を行った。私はクラス2 - 5のために少なくとも3000の訓練画像を持っています。今、私の訓練セットはクラスごとに3000の画像で構成され、私は確率的勾配降下を使用してそれを訓練します。

私のテストセットはで構成されています

Class 1 - 8 images 
Class 2 - 83 images 
Class 3 - 227 images 
Class 4 - 401 images 
Class 5 - 123 images 

マイネットワークが正しく予測:

Class 1 - 0 images 
Class 2 - 0 images 
Class 3 - 0 images 
Class 4 - 399 images 
Class 5 - 0 images 

を、私は非常に正確なネットワークは私のトレーニングセットの制限と15000枚の画像がおそらくある与えられた期待していませんそれだけでは十分ではありませんが、クラス2 - 5には同じ数の別個のトレーニング画像があったので、それほど歪んでいないと思います。私がクラス4の画像のかなり大きな部分でネットワークを訓練していたなら、これは私を驚かせることはありません。私はネットワークが他のクラスの少なくともいくつかを正しく予測すると思っていたでしょう。

どのような考えですか?

EDIT:画像の

タイプ:建物

ネットワークアーキテクチャ:

Input image - 256 x 256 x 3 
Convolutional layer - 15 x 15 filters, 16 filters 
Max 2x2 pooling layer 
Convolutional layer - 11 x 11 filters, 32 filters 
Max 2x2 pooling layer 
Convolutional layer - 7 x 7 filters, 64 filters 
Max 2x2 pooling layer 
Fully connected layer - 1024 outputs 
Softmax classifier layer - 5 outputs 

コスト機能:クロスエントロピー

+0

特定のデータサイエンススタック交換があります - 多分あなたの質問がある方が良いでしょうか? – user3791372

+0

convnetのアーキテクチャと、分類しているオブジェクトについて説明する必要があります。 –

+0

@ user3791372その方向で私を指摘してくれてありがとう! – jlhw

答えて

0

これは(あまり一般的ではありませんが)発生する可能性があります。私はあなたが十分に長く訓練していないと思います。 CNNは、一度に1つのクラスを正しく取得しようとします。通常、損失を正規化していない場合、最大数のサンプルがあります。これは、最初にそのクラスを正しく予測することで最大の利益を得るからです。時間がたつにつれてより良くなっていくにつれて、それはもはやその利益を得ず、他のクラスを正しく予測しようとします。

この問題を回避するには、クラスの頻度に基づいてソフトマックスの損失を重み付けするか、データセットを再サンプリングすることができます。私はあなたのCNNが十分に深くないことも見ています。フィルタのサイズはあなたの解像度に適しておらず、トレーニングサンプルの数も少なすぎます。私はあなたの仕事のためにVGG、GoogLeNet、ResNetまたはAlexNetのようないくつかの事前訓練されたニューラルネットワークを微調整することをお勧めします。あなたはこの例に従うことができますカフェについて

http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html

+0

あなたのコメントとリンクをありがとう!より多くのクラス1画像を取得するためにデータセットをリサンプリングしました。しかし、あなたは正しかった - 私のネットワークは十分に長く訓練されていないので、基本的にはそれが見ている最後のクラスを予測している! 私のネットワークがどれほど深くなり、適切なフィルタサイズがわかるのか教えてください。 – jlhw

0

私はかなり遅れて答えを与えるためだと思うが、私は私の経験/知識を共有して喜びました。 :)

実際には、3x3,5x5などの小さなフィルタサイズを使用することをお勧めします。これは、15x15などと比較して精度の差なしにトレーニング時間を短縮するパラメータが少ないためです。これについては(ImageNetコンテスト受賞者2013-2015を参照してください)。

一方で、モデルが1つのクラスに偏っている理由の1つは、バランスが取れていないためです。あなたができることは、小さなインスタンスのクラスに偏ってくるようにモデルにペナルティを課すことです。 Kerasにはclass_weightパラメータがあり、損失関数の規模を調整できます。

1からSequential - Keras

2 - How to set class weights for imbalanced classes in Keras?

関連する問題