(keras)我想在val_acc停止改善时降低学习率

时间:2019-02-19 10:27:31

标签: keras

我正在尝试制作CNN模型,但准确性较低:(

因此,我想在验证准确性停止提高时降低SGD学习率。

我如何制作和编译它?

1 个答案:

答案 0 :(得分:1)

如果您循环访问model.train_on_batch,则可以手动更改学习率:

import keras.backend as K
from keras.optimizers import Adam
import sys

epochs = 50
batch_size = 32
iterations_per_epoch = len(x_train) // batch_size

lr = 0.01
model.compile(optimizer=Adam(lr), loss='some loss')

min_val_loss = sys.float_info.max
for epoch in range(epochs):
    for batch in range(iterations_per_epoch):
        model.train_on_batch(x_train, y_train)
        val_loss = model.evaluate(x_val, y_val)
        if val_loss >= min_val_loss:
            K.set_value(model.optimizer.lr, lr / 2.)
            lr /= 2.
        else:
            min_val_loss = val_loss

这是一种非常幼稚的方法,可以在验证损失停止减少后降低学习率。我建议实施一些更复杂的规则,例如在最近的X批次中验证损失没有减少。