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