Ранняя остановка не работает так, как вы думаете, она должна возвращать модель с наименьшими потерями или наивысшей точностью, она работает, если нет улучшения точности или потери модели, в течение примерно x эпох (10 в вашем случае, параметр терпения) тогда он остановится.
вы должны использовать функции контрольной точки обратного вызова, например,
keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=True, save_weights_only=False, mode='auto', period=1)
https://keras.io/callbacks/
Это сохранит или проверит лучшую модель, с которой вы столкнулись во время истории тренировок.