Python >> Tutoriel Python >  >> Python Tag >> Keras

Keras :modifier le taux d'apprentissage

Vous pouvez modifier le taux d'apprentissage comme suit :

from keras import backend as K
K.set_value(model.optimizer.learning_rate, 0.001)

Inclus dans votre exemple complet, il se présente comme suit :

from keras.models import Sequential
from keras.layers import Dense
from keras import backend as K
import keras
import numpy as np

model = Sequential()

model.add(Dense(1, input_shape=(10,)))

optimizer = keras.optimizers.Adam(lr=0.01)
model.compile(loss='mse', optimizer=optimizer)

print("Learning rate before first fit:", model.optimizer.learning_rate.numpy())

model.fit(np.random.randn(50,10), np.random.randn(50), epochs=50, verbose=0)

# Change learning rate to 0.001 and train for 50 more epochs
K.set_value(model.optimizer.learning_rate, 0.001)
print("Learning rate before second fit:", model.optimizer.learning_rate.numpy())

model.fit(np.random.randn(50,10), 
          np.random.randn(50), 
          initial_epoch=50, 
          epochs=50,
          verbose=0)

Je viens de tester cela avec keras 2.3.1. Je ne sais pas pourquoi l'approche ne semble pas fonctionner pour vous.


Il existe un autre moyen, vous devez trouver la variable qui contient le taux d'apprentissage et lui attribuer une autre valeur.

optimizer = tf.keras.optimizers.Adam(0.001)
optimizer.learning_rate.assign(0.01)
print(optimizer.learning_rate)

sortie :

<tf.Variable 'learning_rate:0' shape=() dtype=float32, numpy=0.01>

Vous pouvez changer de lr pendant l'entraînement avec

from keras.callbacks import LearningRateScheduler

# This is a sample of a scheduler I used in the past
def lr_scheduler(epoch, lr):
    decay_rate = 0.85
    decay_step = 1
    if epoch % decay_step == 0 and epoch:
        return lr * pow(decay_rate, np.floor(epoch / decay_step))
    return lr

Appliquer le planificateur à votre modèle

callbacks = [LearningRateScheduler(lr_scheduler, verbose=1)]

model = build_model(pretrained_model=ka.InceptionV3, input_shape=(224, 224, 3))
history = model.fit(train, callbacks=callbacks, epochs=EPOCHS, verbose=1)