Saltar al contenido

Cargar un modelo de Keras entrenado y continuar entrenando

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 volver a cargar el modelo es el estado de su optimizador. Para comprobarlo, 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 te 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 una pérdida personalizada definida, 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 lo mencionaron otros, si desea guardar pesos del mejor modelo o desea guardar pesos del modelo en cada época, debe 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 usa un optimizador diferente, o diferentes argumentos para 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, en el que 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 muy malas precisiones. Hasta que me di cuenta de que la última tasa de aprendizaje del modelo preentrenado era la tasa de aprendizaje mínima, es decir, 0,000003. Y si comienzo con esa tasa de aprendizaje, obtengo exactamente las mismas precisiones para comenzar con 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 rebasamiento de GD y, por lo tanto, una precisión muy disminuida.

¡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 *