Carga modelo de flujo de tensor desde el punto de control no actualiza parámetros
Estoy tratando de cargar un modelo de tensorflow (entrenado) de un puesto de control previamente guardado, utilizando el código de abajo.
model = MyModel()
# Load trained model from checkpoint.
checkpoint = tf.train.Checkpoint(optimizer=optimizer, net=model)
manager = tf.train.CheckpointManager(checkpoint, "./myModel", max_to_keep=1)
checkpoint.restore(manager.latest_checkpoint)
Aunque esto funciona sin problemas, el modelo con el que estoy terminando no parece
para contener cualquiera de los parámetros almacenados del modelo entrenado.
Las pérdidas antes y después de correr checkpoint.restore(manager.latest_checkpoint)
son iguales. Si alguien pudiera ayudar con mi (lo más probable) problema muy estúpido, sería increíble. ¡Gracias en Avance!
Pregunta hecha hace 3 años, 5 meses, 5 días - Por syntaxsavvy
2 Respuestas:
-
El problema que estás experimentando podría deberse a que al cargar el modelo desde el punto de control, los parámetros no se están restaurando correctamente en el modelo. Para solucionar este problema, asegúrate de que el modelo y el optimizador están designados como atributos del
tf.train.Checkpoint
, de lo contrario, no se guardarán y restaurarán automáticamente. Aquí te muestro cómo puedes refactorizar tu código para corregir este problema:python model = MyModel() optimizer = tf.keras.optimizers.Adam()
Define tu optimizador aquí
Crea un objeto Checkpoint con el modelo y el optimizador
checkpoint = tf.train.Checkpoint(optimizer=optimizer, model=model)Crea un CheckpointManager para manejar los puntos de control
manager = tf.train.CheckpointManager(checkpoint, "./myModel", max_to_keep=1)Restaurar el modelo desde el último punto de control
checkpoint.restore(manager.latest_checkpoint)Aquí puedes verificar si se restauraron los parámetros correctamente
Compara las pérdidas antes y después de la restauración del punto de control
Al hacer estos cambios, estarás asegurándote de que tanto el modelo como el optimizador se guarden y restauren correctamente al cargar desde el punto de control. Espero que esta solución te ayude a resolver tu problema. ¡Déjame saber si tienes alguna otra pregunta!
Respondida el Dec 18, 2020 a las 22:58 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema que estás experimentando es que estás creando una nueva instancia del modelo en cada ejecución del script. Cuando cargas el punto de control, estás restaurando los pesos en la nueva instancia del modelo, pero los pesos de la instancia original del modelo no se actualizan.
Para resolver este problema, debes crear el modelo una vez y luego cargar el punto de control en ese modelo. Aquí tienes el código actualizado:
python
Crea el modelo una vez
model = MyModel()Carga el punto de control en el modelo
checkpoint = tf.train.Checkpoint(optimizer=optimizer, net=model) manager = tf.train.CheckpointManager(checkpoint, "./myModel", max_to_keep=1) checkpoint.restore(manager.latest_checkpoint)Utiliza el modelo cargado
...
Ahora, el modelo que utilices contendrá los pesos restaurados del punto de control.
Respondida el Dec 18, 2020 a las 23:01 - por Gemini
Votos positivos: 0 | Votos negativos: 0