PyTorch-model
Je gebruikt de OOP-aanpak om de modelarchitectuur te definiëren. Denk eraan dat je hiervoor een modelklasse moet opzetten met twee methoden erin:
.__init__(), waarin je de lagen definieert die je wilt gebruiken;forward(), waarin je bepaalt wat er met de modelinvoer gebeurt zodra het deze ontvangt; hier geef je de invoer door de vooraf gedefinieerde lagen.
Laten we een model bouwen met drie lineaire lagen en ReLU-activaties. Na de laatste lineaire laag heb je in plaats daarvan een sigmoid-activatie nodig, wat geschikt is voor binaire classificatietaken zoals ons probleem met het voorspellen van waterdrinkbaarheid. Hier is het model gedefinieerd met nn.Sequential(), waar je misschien al bekender mee bent:
net = nn.Sequential(
nn.Linear(9, 16),
nn.ReLU(),
nn.Linear(16, 8),
nn.ReLU(),
nn.Linear(8, 1),
nn.Sigmoid(),
)
Laten we dit model herschrijven als een klasse!
Deze oefening maakt deel uit van de cursus
Gevorderde Deep Learning met PyTorch
Oefeninstructies
- Definieer in de
.__init__()-methode de drie lineaire lagen met dimensies die overeenkomen met de gegeven modeldefinitie en ken ze respectievelijk toe aanself.fc1,self.fc2enself.fc3. - Geef in de
forward()-methode de modelinvoerxdoor alle lagen en voeg de activaties toe erbovenop, vergelijkbaar met hoe het al is gedaan voor de eerste laag.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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