我正在尝试制作CNN模型,但准确性较低:(
因此,我想在验证准确性停止提高时降低SGD学习率。
我如何制作和编译它?
答案 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批次中验证损失没有减少。