Ранняя остановка не остановка в Керасе

#python #keras

Вопрос:

Я пробую себя с Керасом.

Я построил модель, содержащую 3 плотных слоя с 1 маскировкой в начале.Поэтому я поставил раннюю остановку, которая отслеживает 'val-loss' , но, как вы можете видеть ниже, после стольких эпох с val_loss одним и тем же, модель продолжает тренироваться. Я не знаю, правильно ли я объявил раннюю остановку.

 3/3 - 0s - loss: 0.3445 - accuracy: 0.3743 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 460/500
3/3 - 0s - loss: 0.3448 - accuracy: 0.3630 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 461/500
3/3 - 0s - loss: 0.3445 - accuracy: 0.3681 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 462/500
3/3 - 0s - loss: 0.3447 - accuracy: 0.3592 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 463/500
3/3 - 0s - loss: 0.3446 - accuracy: 0.3660 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 464/500
3/3 - 0s - loss: 0.3445 - accuracy: 0.3653 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 465/500
3/3 - 0s - loss: 0.3446 - accuracy: 0.3678 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 466/500
3/3 - 0s - loss: 0.3445 - accuracy: 0.3633 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 467/500
3/3 - 0s - loss: 0.3446 - accuracy: 0.3614 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 468/500
3/3 - 0s - loss: 0.3445 - accuracy: 0.3669 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 469/500
3/3 - 0s - loss: 0.3446 - accuracy: 0.3677 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 470/500
3/3 - 0s - loss: 0.3446 - accuracy: 0.3609 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 471/500
3/3 - 0s - loss: 0.3444 - accuracy: 0.3743 - val_loss: 0.4220 - val_accuracy: 0.3510
Epoch 472/500
3/3 - 0s - loss: 0.3446 - accuracy: 0.3641 - val_loss: 0.4220 - val_accuracy: 0.3510
 

Вот мой код для модели :

 model = keras.Sequential()
model.add(layers.Masking(mask_value=0., input_shape=(498, 20)))
model.add(layers.Dense(16,activation ='relu')) 
model.add(layers.Dropout(0.5))
model.add(layers.Dense(8,activation ='relu')) 
model.add(layers.Dropout(0.5))
model.add(layers.Dense(3,activation='softmax'))
model.add(layers.Activation('softmax'))
model.summary()

opt = keras.optimizers.SGD(learning_rate=0.001)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])

model.summary()

es = EarlyStopping(monitor='val_loss', patience=2, verbose=2)
history = model.fit(
    x_train, y_train,
    epochs=500, batch_size=32,
    validation_data=(x_test, y_test),
    verbose = 2,
    callbacks=[es]
    )
scores = model.evaluate(x_test, y_test, verbose=2)
 

Комментарии:

1. Попробуйте упомянуть режим=мин в es = EarlyStopping(monitor='val_loss', patience=2, verbose=2, mode='min')

2. @AmitVikramSingh Я сделал так, как ты предлагаешь, но у меня все еще то же самое. Модель продолжает тренироваться до конца эпох.

3. Попробуйте добавить min_delta = 1e-2 в EarlyStopping.

4. @AmitVikramSingh это действительно работает. Но я не знаю, почему моя версия кода выше не останавливается? Обычно я думаю, что это должно сработать.

5. Может быть, он немного уменьшается в каждую эпоху, скажем, в порядке 1e-5.