Introducció a Transfer Learning
Transfer Learning és una tècnica en Deep Learning on un model desenvolupat per a una tasca inicial es reutilitza com a punt de partida per a un model en una tasca diferent però relacionada. Aquesta tècnica és especialment útil quan no es disposa d'una gran quantitat de dades per entrenar un model des de zero.
Conceptes Clau
- Model Preentrenat: Un model que ha estat entrenat en una gran base de dades per a una tasca específica, com ara la classificació d'imatges.
- Fine-Tuning: Ajustar els pesos d'un model preentrenat a una nova tasca amb un conjunt de dades més petit.
- Feature Extraction: Utilitzar les capes inicials d'un model preentrenat per extreure característiques i només entrenar les capes finals per a la nova tasca.
Avantatges del Transfer Learning
- Reducció del temps d'entrenament: Comença amb un model que ja ha après característiques útils.
- Millora del rendiment: Els models preentrenats solen tenir millor rendiment que els models entrenats des de zero amb petites quantitats de dades.
- Menor necessitat de dades: Permet utilitzar menys dades per obtenir bons resultats.
Exemples de Transfer Learning
Exemple 1: Transfer Learning amb Keras
A continuació, es mostra un exemple pràctic de Transfer Learning utilitzant Keras amb un model preentrenat com VGG16 per a la classificació d'imatges.
import tensorflow as tf from tensorflow.keras.applications import VGG16 from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, Flatten from tensorflow.keras.preprocessing.image import ImageDataGenerator # Carregar el model VGG16 preentrenat sense les capes de classificació base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) # Congelar les capes del model base for layer in base_model.layers: layer.trainable = False # Afegir noves capes de classificació x = base_model.output x = Flatten()(x) x = Dense(1024, activation='relu')(x) predictions = Dense(10, activation='softmax')(x) # Crear el nou model model = Model(inputs=base_model.input, outputs=predictions) # Compilar el model model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # Preparar les dades train_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( 'data/train', target_size=(224, 224), batch_size=32, class_mode='categorical' ) # Entrenar el model model.fit(train_generator, epochs=10, steps_per_epoch=100)
Exemple 2: Transfer Learning amb PyTorch
A continuació, es mostra un exemple pràctic de Transfer Learning utilitzant PyTorch amb un model preentrenat com ResNet50 per a la classificació d'imatges.
import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, models, transforms # Definir les transformacions per a les dades d'entrenament data_transforms = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), ]) # Carregar les dades d'entrenament train_dataset = datasets.ImageFolder('data/train', transform=data_transforms) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True) # Carregar el model ResNet50 preentrenat model = models.resnet50(pretrained=True) # Congelar les capes del model base for param in model.parameters(): param.requires_grad = False # Afegir noves capes de classificació num_ftrs = model.fc.in_features model.fc = nn.Sequential( nn.Linear(num_ftrs, 1024), nn.ReLU(), nn.Linear(1024, 10), nn.Softmax(dim=1) ) # Definir la funció de pèrdua i l'optimitzador criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.fc.parameters(), lr=0.001) # Entrenar el model model.train() for epoch in range(10): running_loss = 0.0 for inputs, labels in train_loader: optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() print(f'Epoch {epoch+1}, Loss: {running_loss/len(train_loader)}')
Exercici Pràctic
Exercici: Transfer Learning amb MobileNetV2
- Carrega el model MobileNetV2 preentrenat utilitzant Keras.
- Congela les capes del model base.
- Afegiu noves capes de classificació per a una tasca de classificació amb 5 classes.
- Entrena el model amb un conjunt de dades d'imatges.
Solució
import tensorflow as tf from tensorflow.keras.applications import MobileNetV2 from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, Flatten from tensorflow.keras.preprocessing.image import ImageDataGenerator # Carregar el model MobileNetV2 preentrenat sense les capes de classificació base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) # Congelar les capes del model base for layer in base_model.layers: layer.trainable = False # Afegir noves capes de classificació x = base_model.output x = Flatten()(x) x = Dense(512, activation='relu')(x) predictions = Dense(5, activation='softmax')(x) # Crear el nou model model = Model(inputs=base_model.input, outputs=predictions) # Compilar el model model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # Preparar les dades train_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( 'data/train', target_size=(224, 224), batch_size=32, class_mode='categorical' ) # Entrenar el model model.fit(train_generator, epochs=10, steps_per_epoch=100)
Resum
En aquesta secció, hem après què és el Transfer Learning, els seus avantatges i com implementar-lo utilitzant Keras i PyTorch. També hem vist exemples pràctics i hem realitzat un exercici per consolidar els coneixements adquirits. Transfer Learning és una eina poderosa que pot millorar significativament el rendiment dels models de Deep Learning, especialment quan es disposa de dades limitades.
Curs de Deep Learning
Mòdul 1: Introducció a Deep Learning
- Què és Deep Learning?
- Història i evolució del Deep Learning
- Aplicacions de Deep Learning
- Conceptes bàsics de xarxes neuronals
Mòdul 2: Fonaments de Xarxes Neuronals
- Perceptró i Perceptró Multicapa
- Funció d'activació
- Propagació cap endavant i cap enrere
- Optimització i funció de pèrdua
Mòdul 3: Xarxes Neuronals Convolucionals (CNN)
- Introducció a les CNN
- Capes convolutionals i de pooling
- Arquitectures populars de CNN
- Aplicacions de CNN en reconeixement d'imatges
Mòdul 4: Xarxes Neuronals Recurrentes (RNN)
- Introducció a les RNN
- LSTM i GRU
- Aplicacions de RNN en processament del llenguatge natural
- Seqüències i sèries temporals
Mòdul 5: Tècniques Avançades en Deep Learning
- Xarxes Generatives Adversarials (GAN)
- Autoencoders
- Transfer Learning
- Regularització i tècniques de millora
Mòdul 6: Eines i Frameworks
- Introducció a TensorFlow
- Introducció a PyTorch
- Comparació de frameworks
- Entorns de desenvolupament i recursos addicionals
Mòdul 7: Projectes Pràctics
- Classificació d'imatges amb CNN
- Generació de text amb RNN
- Detecció d'anomalies amb Autoencoders
- Creació d'una GAN per generació d'imatges