2017-06-26 14 views
1

Kerasで次のモデルを作成しました。データセットはMNISTです。次MNASのKeras VGGモデル:トレーニングと検証精度の差

''' 
    conv - relu - conv- relu - pool - 
    conv - relu - conv- relu - pool - 
    conv - relu - conv- relu - pool - 
    affine - relu - dropout - affine - dropout - softmax 
''' 

model = Sequential() 
model.add(Conv2D(16, kernel_size=(3, 3), 
       padding='same', 
       input_shape=input_shape)) 
model.add(Activation('relu')) 
model.add(Conv2D(16, (3, 3), activation='relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Conv2D(32, (3, 3), padding='same', activation='relu')) 
model.add(Conv2D(32, (3, 3), activation='relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Conv2D(64, (3, 3), padding='same', activation='relu')) 
model.add(Conv2D(64, (3, 3), activation='relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Flatten()) 
model.add(Dense(50, activation='relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(num_classes)) 
model.add(Dropout(0.5)) 
model.add(Activation('softmax')) 

結果である:

60000/60000 [==============================] - 10s - loss: 1.2707 - acc: 0.5059 - val_loss: 0.0881 - val_acc: 0.9785      
Epoch 2/20                                
60000/60000 [==============================] - 9s - loss: 0.9694 - acc: 0.5787 - val_loss: 0.0449 - val_acc: 0.9873          

...   

Epoch 19/20               
60000/60000 [==============================] - 9s - loss: 0.8530 - acc: 0.6004 - val_loss: 0.0282 - val_acc: 0.9937      
Epoch 20/20      
60000/60000 [==============================] - 9s - loss: 0.8564 - acc: 0.5982 - val_loss: 0.0383 - val_acc: 0.9910      
Test loss: 0.0382921607383   
Test accuracy: 0.991      

なぜ検証accururacyはそれほど高くありながら、トレーニングの精度が非常に低いのですか?

答えて

3

最後のDenseレイヤのドロップアウトは、クラスの10個のニューロンの半分をランダムに削除します。あなたの最後の層は、一般に半分のニューロンが欠けているため、正確な半分の時間でしか動かすことができません。

これを削除しようとすると、私はあなたが値を取得すると仮定します。

関連する問題