Saltar al contenido

Cargar un modelo de Keras entrenado y seguir entrenando

Te recomendamos que pruebes esta solución en un ambiente controlado antes de enviarlo a producción, saludos.

Solución:

Realmente – model.save guarda toda la información necesaria para reiniciar el entrenamiento en su caso. Lo único que podría estropearse al recargar el modelo es el estado de su optimizador. Para verificar eso, intente save y recargar el modelo y entrenarlo con datos de entrenamiento.

La mayoría de las respuestas anteriores cubrieron puntos importantes. Si está utilizando Tensorflow reciente (TF2.1 o superior), entonces el siguiente ejemplo le ayudará. La parte modelo del código es del sitio web de Tensorflow.

import tensorflow as tf
from tensorflow import keras
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

def create_model():
  model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(512, activation=tf.nn.relu),  
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation=tf.nn.softmax)
    ])

  model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',metrics=['accuracy'])
  return model

# Create a basic model instance
model=create_model()
model.fit(x_train, y_train, epochs = 10, validation_data = (x_test,y_test),verbose=1)

Guarde el modelo en formato *.tf. Según mi experiencia, si tiene definido custom_loss, el formato *.h5 no guardará el estado del optimizador y, por lo tanto, no servirá para su propósito si desea volver a entrenar el modelo desde donde lo dejamos.

# saving the model in tensorflow format
model.save('./MyModel_tf',save_format='tf')


# loading the saved model
loaded_model = tf.keras.models.load_model('./MyModel_tf')

# retraining the model
loaded_model.fit(x_train, y_train, epochs = 10, validation_data = (x_test,y_test),verbose=1)

Este enfoque reiniciará el entrenamiento donde lo dejamos antes de guardar el modelo. Como mencionaron otros, si desea guardar los pesos del mejor modelo o si desea guardar los pesos del modelo cada época, necesita usar la función de devolución de llamada de Keras (ModelCheckpoint) con opciones como save_weights_only=True, save_freq='epoch'y save_best_only.

Para obtener más detalles, consulte aquí y otro ejemplo aquí.

El problema podría ser que use un optimizador diferente, o argumentos diferentes a su optimizador. Acabo de tener el mismo problema con un modelo preentrenado personalizado, usando

reduce_lr = ReduceLROnPlateau(monitor='loss', factor=lr_reduction_factor,
                              patience=patience, min_lr=min_lr, verbose=1)

para el modelo preentrenado, donde la tasa de aprendizaje original comienza en 0,0003 y durante el preentrenamiento se reduce a la tasa min_learning, que es 0,000003

Simplemente copié esa línea en el script que usa el modelo pre-entrenado y obtuve una precisión realmente mala. Hasta que noté que la última tasa de aprendizaje del modelo preentrenado era la tasa de aprendizaje mínima, es decir, 0,000003. Y si empiezo con esa tasa de aprendizaje, obtengo exactamente las mismas precisiones iniciales que la salida del modelo preentrenado, lo cual tiene sentido, ya que comenzar con una tasa de aprendizaje que es 100 veces mayor que la última tasa de aprendizaje utilizada en el modelo preentrenado. El modelo dará como resultado un gran exceso de GD y, por lo tanto, una gran disminución de la precisión.

Calificaciones y reseñas

Si conservas algún reparo o capacidad de beneficiar nuestro ensayo puedes dejar una crítica y con gusto lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *