2017-08-12 13 views
0

〜10,000の画像でコヴネットをトレーニングしていて、オプティマイザをopt = SGD()からopt = 'adam'に切り替えると、精度が大幅に低下し、その他のパラメータはすべて同じになります。 SGD()では、約80%の精度(各エポック後に徐々に増加)に達します。 Adamを使用すると、私はすべての時代の検証精度が22.25%に止まっています。ニューラルネットオプティマイザがSGDからAdamに変わると、精度が大幅に低下するのはなぜですか?

これはおそらく原因がわかります。

パラメータ

dropout_prob = 0.2 
activation_function = 'relu' 
loss_function = 'categorical_crossentropy' 
batch_size = 32 
epoch_count = 20 
num_classes = 3 

モデル

model = Sequential() 
     model.add(Conv2D(filters=16, kernel_size=(3, 3), input_shape=inp_shape)) 
     model.add(Conv2D(filters=32, kernel_size=(3, 3))) 
     model.add(MaxPooling2D(pool_size=(2, 2))) 
     model.add(Dropout(rate=dropout_prob)) 
     model.add(Flatten()) 
     model.add(Dense(128, activation=activation_function)) 
     model.add(Dropout(rate=dropout_prob)) 
     model.add(Dense(64, activation=activation_function)) 
     model.add(Dropout(rate=dropout_prob)) 
     model.add(Dense(32, activation=activation_function)) 
     model.add(Dense(num_classes, activation='softmax')) 
     model.summary() 
     model.compile(loss=loss_function, optimizer=opt, metrics=['accuracy']) 
     history = model.fit(x_train, y_train_cat, batch_size=batch_size, epochs=epoch_count, 
          verbose=verbose_level, 
          validation_data=(x_test, y_test_cat)) 
+0

'opt'とは何ですか? – Cristy

+0

私は珍しいです、私の答えはあなたの質問を解決しましたか? – yuval

答えて

1

異なるオプティマイザは収束に異なる最適化ハイパーパラメータが必要な場合があります。

opt = keras.optimizers.Adam(lr=learning_rate) 

と(デフォルトの学習率を使用する)opt='adam'を交換し、代わりのlearning_rateのデフォルト値を使用してみてください、cross-validationを使用して、その値を選択してください。

通常は、学習率は1e-6..0.1の間になります。学習率には次の値を試すことができます:[1e-6, 3e-6, 1e-5, 3e-5, 1e-4, ..., 1e-1]

関連する問題