En aquest tema, aprendrem com desar i carregar models en TensorFlow. Aquesta habilitat és essencial per a la producció, ja que permet reutilitzar models entrenats sense haver de reentrenar-los cada vegada. També facilita la compartició de models amb altres desenvolupadors o la seva integració en aplicacions.

  1. Introducció

Desar i carregar models en TensorFlow es pot fer de diverses maneres. Les dues més comunes són:

  • Desament i càrrega del model complet: Inclou l'arquitectura del model, els pesos i l'estat de l'optimitzador.
  • Desament i càrrega només dels pesos: Només es desa l'estat dels pesos del model.

  1. Desament del model complet

2.1. Desament del model

Per desar un model complet, utilitzem el mètode model.save(). Aquest mètode desa:

  • L'arquitectura del model, que permet reconstruir el model.
  • Els pesos del model.
  • L'estat de l'optimitzador, que permet reprendre l'entrenament exactament des d'on es va deixar.
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# Creem un model simple
model = Sequential([
    Dense(64, activation='relu', input_shape=(784,)),
    Dense(10, activation='softmax')
])

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

# Entrenem el model (aquí utilitzem dades fictícies per a l'exemple)
model.fit(x_train, y_train, epochs=5)

# Desem el model complet
model.save('my_model.h5')

2.2. Càrrega del model

Per carregar un model desat, utilitzem el mètode tf.keras.models.load_model().

# Carreguem el model
new_model = tf.keras.models.load_model('my_model.h5')

# Verifiquem l'arquitectura del model
new_model.summary()

  1. Desament i càrrega només dels pesos

3.1. Desament dels pesos

Si només volem desar els pesos del model, utilitzem el mètode model.save_weights().

# Desem només els pesos del model
model.save_weights('my_model_weights.h5')

3.2. Càrrega dels pesos

Per carregar els pesos en un model, primer hem de crear l'arquitectura del model i després carregar els pesos utilitzant el mètode model.load_weights().

# Creem l'arquitectura del model
model = Sequential([
    Dense(64, activation='relu', input_shape=(784,)),
    Dense(10, activation='softmax')
])

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

# Carreguem els pesos
model.load_weights('my_model_weights.h5')

  1. Format de desament de TensorFlow (SavedModel)

El format SavedModel és el format de desament per defecte en TensorFlow. És més flexible i recomanat per a la producció.

4.1. Desament en format SavedModel

# Desem el model en format SavedModel
model.save('saved_model/my_model')

4.2. Càrrega en format SavedModel

# Carreguem el model en format SavedModel
new_model = tf.keras.models.load_model('saved_model/my_model')

# Verifiquem l'arquitectura del model
new_model.summary()

  1. Exercicis pràctics

Exercici 1: Desament i càrrega del model complet

  1. Crea un model simple de xarxa neuronal.
  2. Entrena el model amb un conjunt de dades.
  3. Desa el model complet.
  4. Carrega el model desat i verifica la seva arquitectura.

Solució

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 1. Crea un model simple de xarxa neuronal
model = Sequential([
    Dense(64, activation='relu', input_shape=(784,)),
    Dense(10, activation='softmax')
])

# 2. Entrena el model amb un conjunt de dades (dades fictícies per a l'exemple)
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)

# 3. Desa el model complet
model.save('my_model.h5')

# 4. Carrega el model desat i verifica la seva arquitectura
new_model = tf.keras.models.load_model('my_model.h5')
new_model.summary()

Exercici 2: Desament i càrrega només dels pesos

  1. Crea un model simple de xarxa neuronal.
  2. Entrena el model amb un conjunt de dades.
  3. Desa només els pesos del model.
  4. Crea una nova instància del model amb la mateixa arquitectura.
  5. Carrega els pesos desats i verifica la seva arquitectura.

Solució

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 1. Crea un model simple de xarxa neuronal
model = Sequential([
    Dense(64, activation='relu', input_shape=(784,)),
    Dense(10, activation='softmax')
])

# 2. Entrena el model amb un conjunt de dades (dades fictícies per a l'exemple)
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)

# 3. Desa només els pesos del model
model.save_weights('my_model_weights.h5')

# 4. Crea una nova instància del model amb la mateixa arquitectura
new_model = Sequential([
    Dense(64, activation='relu', input_shape=(784,)),
    Dense(10, activation='softmax')
])

# 5. Carrega els pesos desats i verifica la seva arquitectura
new_model.load_weights('my_model_weights.h5')
new_model.summary()

  1. Resum

En aquest tema, hem après com desar i carregar models en TensorFlow. Hem vist com desar i carregar el model complet, així com només els pesos del model. També hem explorat el format de desament SavedModel, que és el format recomanat per a la producció. A més, hem practicat aquests conceptes amb exercicis pràctics per reforçar l'aprenentatge.

En el proper tema, explorarem com utilitzar TensorFlow Serving per desplegar models en producció.

© Copyright 2024. Tots els drets reservats