L'aprenentatge per transferència és una tècnica poderosa en el camp de l'aprenentatge automàtic que permet utilitzar un model preentrenat en una tasca similar per millorar el rendiment i reduir el temps d'entrenament en una nova tasca. En aquest tema, aprendrem com utilitzar models preentrenats amb TensorFlow per aplicar l'aprenentatge per transferència.
Continguts
- Què és l'aprenentatge per transferència?
- Avantatges de l'aprenentatge per transferència
- Com utilitzar models preentrenats amb TensorFlow
- Exemple pràctic: Classificació d'imatges amb un model preentrenat
- Exercicis pràctics
- Què és l'aprenentatge per transferència?
L'aprenentatge per transferència implica prendre un model que ha estat entrenat en una gran quantitat de dades en una tasca específica i reutilitzar-lo com a punt de partida per a una nova tasca. Això és especialment útil quan no es disposa d'una gran quantitat de dades per entrenar un model des de zero.
- Avantatges de l'aprenentatge per transferència
- Reducció del temps d'entrenament: Els models preentrenats ja han après característiques útils, per la qual cosa necessiten menys temps per adaptar-se a la nova tasca.
- Millor rendiment: Els models preentrenats solen oferir un millor rendiment, especialment quan es disposa de poques dades.
- Menor necessitat de dades: Es pot aconseguir un bon rendiment amb menys dades d'entrenament.
- Com utilitzar models preentrenats amb TensorFlow
TensorFlow ofereix una àmplia gamma de models preentrenats a través de la seva biblioteca tf.keras.applications
. Aquests models es poden carregar fàcilment i adaptar-se a noves tasques.
Passos per utilitzar un model preentrenat:
-
Carregar el model preentrenat:
import tensorflow as tf from tensorflow.keras.applications import VGG16 # Carregar el model VGG16 preentrenat sense la capa de classificació final base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
-
Congelar les capes del model preentrenat:
for layer in base_model.layers: layer.trainable = False
-
Afegir capes personalitzades per a la nova tasca:
from tensorflow.keras import layers, models model = models.Sequential([ base_model, layers.Flatten(), layers.Dense(256, activation='relu'), layers.Dropout(0.5), layers.Dense(10, activation='softmax') # Suposant que tenim 10 classes ])
-
Compilar el model:
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
-
Entrenar el model:
# Suposant que tenim dades d'entrenament i validació model.fit(train_data, train_labels, epochs=10, validation_data=(val_data, val_labels))
- Exemple pràctic: Classificació d'imatges amb un model preentrenat
Descripció de l'exemple
En aquest exemple, utilitzarem el model preentrenat VGG16 per classificar imatges de gats i gossos. Utilitzarem un conjunt de dades reduït per demostrar com l'aprenentatge per transferència pot ajudar a obtenir bons resultats amb menys dades.
Codi complet de l'exemple
import tensorflow as tf from tensorflow.keras.applications import VGG16 from tensorflow.keras import layers, models from tensorflow.keras.preprocessing.image import ImageDataGenerator # Carregar el model VGG16 preentrenat sense la capa de classificació final base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) # Congelar les capes del model preentrenat for layer in base_model.layers: layer.trainable = False # Afegir capes personalitzades per a la nova tasca model = models.Sequential([ base_model, layers.Flatten(), layers.Dense(256, activation='relu'), layers.Dropout(0.5), layers.Dense(1, activation='sigmoid') # Classificació binària: gats vs gossos ]) # Compilar el model model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # Preparar les dades train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) val_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( 'data/train', # Directori amb les imatges d'entrenament target_size=(224, 224), batch_size=32, class_mode='binary' ) val_generator = val_datagen.flow_from_directory( 'data/validation', # Directori amb les imatges de validació target_size=(224, 224), batch_size=32, class_mode='binary' ) # Entrenar el model model.fit(train_generator, epochs=10, validation_data=val_generator)
- Exercicis pràctics
Exercici 1: Utilitzar un model preentrenat diferent
- Carrega un model preentrenat diferent de
tf.keras.applications
(per exemple,ResNet50
). - Congela les capes del model preentrenat.
- Afegir capes personalitzades per a una nova tasca de classificació.
- Compila i entrena el model amb un conjunt de dades de la teva elecció.
Exercici 2: Ajustar les capes del model preentrenat
- Descongela algunes de les capes superiors del model preentrenat.
- Reentrena el model amb un conjunt de dades de la teva elecció.
- Compara els resultats amb els obtinguts quan totes les capes estaven congelades.
Solucions
Solució a l'Exercici 1
from tensorflow.keras.applications import ResNet50 # Carregar el model ResNet50 preentrenat sense la capa de classificació final base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) # Congelar les capes del model preentrenat for layer in base_model.layers: layer.trainable = False # Afegir capes personalitzades per a la nova tasca model = models.Sequential([ base_model, layers.GlobalAveragePooling2D(), layers.Dense(256, activation='relu'), layers.Dropout(0.5), layers.Dense(1, activation='sigmoid') # Classificació binària ]) # Compilar el model model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # Entrenar el model (suposant que ja tenim els generadors de dades) model.fit(train_generator, epochs=10, validation_data=val_generator)
Solució a l'Exercici 2
# Descongelar les capes superiors del model preentrenat for layer in base_model.layers[-4:]: layer.trainable = True # Compilar el model amb un aprenentatge més baix per evitar sobreajustament model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-5), loss='binary_crossentropy', metrics=['accuracy']) # Reentrenar el model model.fit(train_generator, epochs=10, validation_data=val_generator)
Conclusió
L'aprenentatge per transferència és una tècnica molt útil per millorar el rendiment dels models d'aprenentatge automàtic, especialment quan es disposa de poques dades. En aquest tema, hem après com utilitzar models preentrenats amb TensorFlow i hem vist un exemple pràctic de classificació d'imatges. Els exercicis pràctics proporcionats t'ajudaran a consolidar els coneixements adquirits i a experimentar amb diferents models i configuracions.
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