Solución:
Puede cambiar la tasa de aprendizaje de la siguiente manera:
from keras import backend as K
K.set_value(model.optimizer.learning_rate, 0.001)
Incluido en su ejemplo completo, tiene el siguiente aspecto:
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)
Acabo de probar esto con keras 2.3.1. No estoy seguro de por qué el enfoque no pareció funcionar para usted.
Hay otra forma, tienes que encontrar la variable que contiene la tasa de aprendizaje y asignarle otro valor.
optimizer = tf.keras.optimizers.Adam(0.001)
optimizer.learning_rate.assign(0.01)
print(optimizer.learning_rate)
producción:
<tf.Variable 'learning_rate:0' shape=() dtype=float32, numpy=0.01>
Puedes cambiar lr durante el entrenamiento con
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
Aplicar programador a su modelo
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)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)