En aquest tema, aprendrem com desar i carregar models en PyTorch. Aquesta habilitat és essencial per a la reutilització de models entrenats, la compartició de models amb altres persones i la implementació de models en producció.
- Introducció
Desar i carregar models en PyTorch és un procés senzill però crucial. PyTorch proporciona dues maneres principals de desar models:
- Desar només els pesos del model (state_dict).
- Desar tot el model (estructura + pesos).
- Desament de Models
2.1 Desar només els pesos del model
Desar només els pesos del model és la manera més recomanada, ja que és més flexible i permet reconstruir el model amb diferents configuracions.
import torch import torch.nn as nn # Definim una xarxa neuronal simple class SimpleNN(nn.Module): def __init__(self): super(SimpleNN, self).__init__() self.fc1 = nn.Linear(10, 50) self.fc2 = nn.Linear(50, 1) def forward(self, x): x = torch.relu(self.fc1(x)) x = self.fc2(x) return x # Creem una instància del model model = SimpleNN() # Desem els pesos del model torch.save(model.state_dict(), 'model_weights.pth')
2.2 Desar tot el model
Desar tot el model inclou tant l'estructura com els pesos. Això pot ser útil per a la reproducció exacta del model, però és menys flexible.
- Càrrega de Models
3.1 Càrrega només dels pesos del model
Per carregar només els pesos del model, primer hem de crear una instància del model amb la mateixa estructura i després carregar els pesos.
# Creem una nova instància del model model = SimpleNN() # Carreguem els pesos del model model.load_state_dict(torch.load('model_weights.pth')) # Posem el model en mode d'avaluació model.eval()
3.2 Càrrega de tot el model
Per carregar tot el model, simplement utilitzem la funció torch.load
.
# Carreguem tot el model model = torch.load('model_complete.pth') # Posem el model en mode d'avaluació model.eval()
- Exercicis Pràctics
Exercici 1: Desar i Carregar un Model Simple
- Crea una xarxa neuronal simple amb PyTorch.
- Entrena el model amb un conjunt de dades petit.
- Desa els pesos del model.
- Carrega els pesos del model en una nova instància.
- Comprova que el model carregat produeix les mateixes prediccions que el model original.
Solució
import torch import torch.nn as nn import torch.optim as optim # Definim una xarxa neuronal simple class SimpleNN(nn.Module): def __init__(self): super(SimpleNN, self).__init__() self.fc1 = nn.Linear(10, 50) self.fc2 = nn.Linear(50, 1) def forward(self, x): x = torch.relu(self.fc1(x)) x = self.fc2(x) return x # Creem una instància del model model = SimpleNN() # Definim una pèrdua i un optimitzador criterion = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=0.01) # Generem dades aleatòries per entrenar inputs = torch.randn(100, 10) targets = torch.randn(100, 1) # Entrenem el model for epoch in range(100): optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, targets) loss.backward() optimizer.step() # Desa els pesos del model torch.save(model.state_dict(), 'simple_model_weights.pth') # Creem una nova instància del model new_model = SimpleNN() # Carreguem els pesos del model new_model.load_state_dict(torch.load('simple_model_weights.pth')) # Posem el model en mode d'avaluació new_model.eval() # Comprovem que el model carregat produeix les mateixes prediccions with torch.no_grad(): original_outputs = model(inputs) loaded_outputs = new_model(inputs) print(torch.allclose(original_outputs, loaded_outputs))
- Resum
En aquesta secció, hem après com desar i carregar models en PyTorch. Hem vist dues maneres principals de desar models: desar només els pesos i desar tot el model. També hem practicat com carregar models desats i hem realitzat un exercici pràctic per reforçar aquests conceptes. Aquestes habilitats són fonamentals per a la reutilització i la implementació de models en aplicacions reals.
PyTorch: De Principiant a Avançat
Mòdul 1: Introducció a PyTorch
- Què és PyTorch?
- Configuració de l'Entorn
- Operacions Bàsiques amb Tensor
- Autograd: Diferenciació Automàtica
Mòdul 2: Construcció de Xarxes Neuronals
- Introducció a les Xarxes Neuronals
- Creació d'una Xarxa Neuronal Simple
- Funcions d'Activació
- Funcions de Pèrdua i Optimització
Mòdul 3: Entrenament de Xarxes Neuronals
- Càrrega i Preprocessament de Dades
- Bucle d'Entrenament
- Validació i Prova
- Desament i Càrrega de Models
Mòdul 4: Xarxes Neuronals Convolucionals (CNNs)
- Introducció a les CNNs
- Construcció d'una CNN des de Zero
- Aprenentatge per Transferència amb Models Preentrenats
- Ajust Fi de les CNNs
Mòdul 5: Xarxes Neuronals Recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN des de Zero
- Xarxes de Memòria a Llarg i Curt Termini (LSTM)
- Unitats Recurrents Gated (GRUs)
Mòdul 6: Temes Avançats
- Xarxes Generatives Adversàries (GANs)
- Aprenentatge per Reforç amb PyTorch
- Desplegament de Models PyTorch
- Optimització del Rendiment