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.
- 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.
- 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()
- 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().
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')
- 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
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()
- Exercicis pràctics
Exercici 1: Desament i càrrega del model complet
- Crea un model simple de xarxa neuronal.
- Entrena el model amb un conjunt de dades.
- Desa el model complet.
- 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
- Crea un model simple de xarxa neuronal.
- Entrena el model amb un conjunt de dades.
- Desa només els pesos del model.
- Crea una nova instància del model amb la mateixa arquitectura.
- 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()
- 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ó.
Curs de TensorFlow
Mòdul 1: Introducció a TensorFlow
- Què és TensorFlow?
- Configuració de TensorFlow
- Conceptes bàsics de TensorFlow
- Hola món amb TensorFlow
Mòdul 2: Conceptes bàsics de TensorFlow
Mòdul 3: Gestió de dades a TensorFlow
Mòdul 4: Construcció de xarxes neuronals
- Introducció a les xarxes neuronals
- Creació d'una xarxa neuronal simple
- Funcions d'activació
- Funcions de pèrdua i optimitzadors
Mòdul 5: Xarxes neuronals convolucionals (CNNs)
Mòdul 6: Xarxes neuronals recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN
- Memòria a llarg termini (LSTM)
- Unitats recurrents amb porta (GRUs)
Mòdul 7: Tècniques avançades de TensorFlow
- Capes i models personalitzats
- TensorFlow Hub
- Aprenentatge per transferència
- Ajust de hiperparàmetres
