En este tema, aprenderemos cómo guardar y cargar modelos en TensorFlow. Esta habilidad es crucial para poder reutilizar modelos entrenados, compartirlos con otros, o desplegarlos en producción. TensorFlow ofrece varias formas de guardar y cargar modelos, y en esta sección cubriremos las más comunes y efectivas.

Contenido

Introducción

Guardar y cargar modelos en TensorFlow se puede hacer de dos maneras principales:

  • Guardar y cargar el modelo completo.
  • Guardar y cargar solo los pesos del modelo.

Ambas técnicas tienen sus propias ventajas y desventajas, y la elección entre ellas depende del caso de uso específico.

Guardado de Modelos

Guardar el Modelo Completo

Guardar el modelo completo incluye tanto la arquitectura del modelo como los pesos y el optimizador. Esto se hace utilizando el método model.save().

import tensorflow as tf

# Definimos un modelo simple
model = tf.keras.Sequential([
    tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)),
    tf.keras.layers.Dense(10, activation='softmax')
])

# Compilamos el modelo
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Guardamos el modelo completo
model.save('my_model.h5')

Guardar Solo los Pesos del Modelo

Si solo necesitas guardar los pesos del modelo, puedes usar el método model.save_weights().

# Guardamos solo los pesos del modelo
model.save_weights('my_model_weights.h5')

Carga de Modelos

Cargar el Modelo Completo

Para cargar un modelo completo, utilizamos el método tf.keras.models.load_model().

# Cargamos el modelo completo
loaded_model = tf.keras.models.load_model('my_model.h5')

Cargar Solo los Pesos del Modelo

Para cargar solo los pesos del modelo, primero necesitas definir la arquitectura del modelo y luego cargar los pesos.

# Definimos la arquitectura del modelo
model = tf.keras.Sequential([
    tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)),
    tf.keras.layers.Dense(10, activation='softmax')
])

# Cargamos los pesos del modelo
model.load_weights('my_model_weights.h5')

Ejemplo Práctico

Vamos a ver un ejemplo completo de cómo guardar y cargar un modelo en TensorFlow.

import tensorflow as tf
import numpy as np

# Definimos un modelo simple
model = tf.keras.Sequential([
    tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)),
    tf.keras.layers.Dense(10, activation='softmax')
])

# Compilamos el modelo
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Generamos datos de ejemplo
x_train = np.random.random((1000, 784))
y_train = np.random.randint(10, size=(1000,))

# Entrenamos el modelo
model.fit(x_train, y_train, epochs=5)

# Guardamos el modelo completo
model.save('my_model.h5')

# Cargamos el modelo completo
loaded_model = tf.keras.models.load_model('my_model.h5')

# Evaluamos el modelo cargado
loss, accuracy = loaded_model.evaluate(x_train, y_train)
print(f'Loss: {loss}, Accuracy: {accuracy}')

Ejercicios Prácticos

Ejercicio 1: Guardar y Cargar un Modelo

  1. Define un modelo simple de red neuronal.
  2. Entrena el modelo con datos de ejemplo.
  3. Guarda el modelo completo en un archivo.
  4. Carga el modelo desde el archivo.
  5. Evalúa el modelo cargado con los mismos datos de ejemplo.

Solución

import tensorflow as tf
import numpy as np

# Paso 1: Definir el modelo
model = tf.keras.Sequential([
    tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)),
    tf.keras.layers.Dense(10, activation='softmax')
])

# Paso 2: Compilar y entrenar el modelo
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
x_train = np.random.random((1000, 784))
y_train = np.random.randint(10, size=(1000,))
model.fit(x_train, y_train, epochs=5)

# Paso 3: Guardar el modelo completo
model.save('exercise_model.h5')

# Paso 4: Cargar el modelo desde el archivo
loaded_model = tf.keras.models.load_model('exercise_model.h5')

# Paso 5: Evaluar el modelo cargado
loss, accuracy = loaded_model.evaluate(x_train, y_train)
print(f'Loss: {loss}, Accuracy: {accuracy}')

Conclusión

En esta sección, hemos aprendido cómo guardar y cargar modelos en TensorFlow. Esta habilidad es esencial para reutilizar modelos entrenados, compartirlos y desplegarlos en producción. Hemos cubierto tanto el guardado y carga del modelo completo como solo de los pesos del modelo. Además, hemos visto un ejemplo práctico y un ejercicio para reforzar los conceptos aprendidos.

En el próximo tema, exploraremos cómo utilizar TensorFlow Serving para desplegar modelos en producción.

© Copyright 2024. Todos los derechos reservados