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
