Если вы зациклились на 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 пакетов или около того.