2017-11-22 12 views
1

私はしばらくの間、CNNを勉強していて、まだそれについてよく分かりません。だから私は重要だと思ったものを挿入した。私のモデルはうまく機能していますか?

私は手のジェスチャーのデータセットを持っています。これには、10クラスの1400イメージが含まれています。私はスパイダーIDEのケラスでCNNモデルを構築しています。シーケンシャルは以下の通りです。

model = Sequential() 

model.add(Convolution2D(32, 3,3,border_mode='same', input_shape=input_shape)) 
model.add(Activation('relu')) 
model.add(Convolution2D(32, 3, 3)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.5)) 

model.add(Convolution2D(64, 3, 3)) 
model.add(Activation('relu')) 
model.add(Convolution2D(64, 3, 3)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.5)) 

model.add(Convolution2D(64, 3, 3)) 
model.add(Activation('relu')) 
model.add(Convolution2D(64, 3, 3)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.5)) 

model.add(Flatten()) 
model.add(Dense(64)) 
model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(num_classes)) 
model.add(Activation('softmax')) 

model.compile(loss='categorical_crossentropy', optimizer='rmsprop',metrics=["accuracy"]) 

私は30のエポックと獲得とそれを訓練し:

Test Loss: 0.260991449015 
Test accuracy: 0.928571430274 

      precision recall f1-score support 

    class 0  1.00  0.93  0.96  28 
    class 1  0.96  0.96  0.96  26 
    class 2  0.92  1.00  0.96  24 
    class 3  0.72  0.87  0.79  30 
    class 4  0.97  0.97  0.97  35 
    class 5  0.90  0.93  0.92  29 
    class 6  0.93  1.00  0.97  28 
    class 7  1.00  0.97  0.98  33 
    class 8  1.00  0.95  0.97  19 
    class 9  0.95  0.71  0.82  28 

avg/total  0.93  0.93  0.93  280 

Confusion matrix, without normalization 
[[26 0 0 0 1 0 1 0 0 0] 
[ 0 25 1 0 0 0 0 0 0 0] 
[ 0 0 24 0 0 0 0 0 0 0] 
[ 0 0 1 26 0 3 0 0 0 0] 
[ 0 1 0 0 34 0 0 0 0 0] 
[ 0 0 0 1 0 27 1 0 0 0] 
[ 0 0 0 0 0 0 28 0 0 0] 
[ 0 0 0 0 0 0 0 32 0 1] 
[ 0 0 0 1 0 0 0 0 18 0] 
[ 0 0 0 8 0 0 0 0 0 20]] 

accuracyloss

Q1:このモデルはうまくやっていますか? Q2:私はあまりフィットしませんか? Q3:CNNを可能な限り最良の方法でモデル化するにはどうすればよいですか?

は、テストデータセットのご混同行列は、行列の対角部分に非常に高い数字を持つ、ほとんど他の場所でゼロ考えると、あなたの時間

+0

あなたが過ぎているかどうかテストするには、データの一部をトレインセットとテストセットに分割します。トレーニングセットがテストセットを実行し始めると、モデルはオーバーフィットになります新しい目に見えないデータへ – DJK

+0

私は、混同行列、precisonとrecalテーブル、いくつかの画像を順次並べて編集しようとしています。しかし、正しくフォーマットされていないコードがあると言っています。実際に私は何も持っていない。 – Sohib

+0

この問題は、問題に対する正確な答えがないため、閉じられました。 ANNは、正しくセットアップされている限り、常にうまく機能します。モデルを改善するための正解はありません。 Q1とQ3は答えられません(技術的に..)。 – DJK

答えて

2

いただきありがとうございます、あなたのモデルが以外に(適切に取り付けられていることを示すものですあなたの混乱マトリックスに8のエントリがある1つのケース)。

あなたが言及したようにあなたのデータセットを見ると、それは平均でクラスあたり140画像である10のクラスを持つわずか1400画像を含んでいます。ニューラルネットワークが一般化するための例は、実際には良い数ではありません。あなたのデータセットにはどれだけの多様性があり、ネットワークを本番環境にどのように配備したいかはわかりません。 例えば、あなたのデータセットが緑の背景色を持つすべての画像を持ち、手画像のみが存在するとします。テスト中に何らかの形でこの現象、つまり緑色の背景と手画像のみをシミュレートできる場合、ネットワークは本番環境でうまくいく可能性があります。しかし、この種の条件がシミュレートされておらず、実稼動環境でモデルをデプロイすると、モデルが悪く実行される可能性が高いとします。

データセットに多様性を追加するには、ImageDataGeneratorを使用し、さまざまなタイプの歪みをシミュレートして、ネットワークが必要な機能をより多く学習するようにします。

+0

ありがとう! ImageDataGeneratorにアクセスできません。それは動作していません! – Sohib

関連する問題