#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.