Tensorflow: почему EarlyStopping не восстанавливается на основе отслеживаемого значения? - PullRequest
0 голосов
/ 17 июня 2020

Я тренируюсь с ранней остановкой следующим образом:

model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate),
          loss='categorical_crossentropy',
          metrics=['accuracy']
          ) 
callback = tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', 
                                        verbose=1,
                                        patience=5,
                                        mode='max',
                                        restore_best_weights=True)
history = model.fit_generator(
train_data_gen,
steps_per_epoch=total_train // batch_size,
epochs=epochs, 
callbacks=[callback],
validation_data=val_data_gen,
validation_steps=total_val // batch_size
)

Вывод:

WARNING:tensorflow:sample_weight modes were coerced from
...
to  
['...']
WARNING:tensorflow:sample_weight modes were coerced from
...
to  
['...']
Train for 72 steps, validate for 5 steps
Epoch 1/50
72/72 [==============================] - 8s 110ms/step - loss: 0.5341 - accuracy: 0.7432 - val_loss: 1.4033 - val_accuracy: 0.2625
Epoch 2/50
72/72 [==============================] - 7s 101ms/step - loss: 0.3359 - accuracy: 0.8624 - val_loss: 0.4895 - val_accuracy: 0.8000
Epoch 3/50
72/72 [==============================] - 7s 94ms/step - loss: 0.2520 - accuracy: 0.9036 - val_loss: 0.1946 - val_accuracy: 0.9500
Epoch 4/50
72/72 [==============================] - 7s 103ms/step - loss: 0.2336 - accuracy: 0.9229 - val_loss: 0.4333 - val_accuracy: 0.8250
Epoch 5/50
72/72 [==============================] - 7s 101ms/step - loss: 0.1981 - accuracy: 0.9211 - val_loss: 0.3284 - val_accuracy: 0.8750
Epoch 6/50
72/72 [==============================] - 7s 103ms/step - loss: 0.1764 - accuracy: 0.9369 - val_loss: 0.5335 - val_accuracy: 0.8125
Epoch 7/50
72/72 [==============================] - 8s 104ms/step - loss: 0.1399 - accuracy: 0.9483 - val_loss: 0.5014 - val_accuracy: 0.7875
Epoch 8/50
71/72 [============================>.] - ETA: 0s - loss: 0.1167 - accuracy: 0.9547
Restoring model weights from the end of the best epoch.
72/72 [==============================] - 8s 105ms/step - loss: 0.1182 - accuracy: 0.9544 - val_loss: 1.1666 - val_accuracy: 0.4125
Epoch 00008: early stopping

Однако Restoring model weights... явно не для лучшего значения наблюдаемого значения, но какое лучшее значение для metric используется в model.compile? Как мне изменить это, чтобы восстановить лучшее значение для val_accuracy?

...