Modello PyTorch
Userai l'approccio OOP per definire l'architettura del modello. Ricorda che questo richiede di impostare una classe del modello e definire al suo interno due metodi:
.__init__(), in cui definisci i livelli che vuoi usare;forward(), in cui definisci cosa succede agli input del modello quando li riceve; qui è dove passi gli input attraverso i livelli predefiniti.
Costruiamo un modello con tre livelli lineari e attivazioni ReLU. Dopo l'ultimo livello lineare, ti serve invece un'attivazione sigmoid, ben adatta a compiti di classificazione binaria come il nostro problema di previsione della potabilità dell'acqua. Ecco il modello definito usando nn.Sequential(), con cui potresti avere più familiarità:
net = nn.Sequential(
nn.Linear(9, 16),
nn.ReLU(),
nn.Linear(16, 8),
nn.ReLU(),
nn.Linear(8, 1),
nn.Sigmoid(),
)
R riscriviamo questo modello come una classe!
Questo esercizio fa parte del corso
Deep Learning intermedio con PyTorch
Istruzioni dell'esercizio
- Nel metodo
.__init__(), definisci i tre livelli lineari con dimensioni corrispondenti alla definizione del modello fornita e assegnali rispettivamente aself.fc1,self.fc2eself.fc3. - Nel metodo
forward(), passa l'input del modelloxattraverso tutti i livelli, ricordandoti di aggiungere le attivazioni sopra di essi, in modo simile a quanto già fatto per il primo livello.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super().__init__()
# Define the three linear layers
self.fc1 = ____
self.fc2 = ____
self.fc3 = ____
def forward(self, x):
# Pass x through linear layers adding activations
x = nn.functional.relu(self.fc1(x))
x = ____
x = ____
return x