Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Definieer in de .__init__()-methode de drie lineaire lagen met dimensies die overeenkomen met de gegeven modeldefinitie en ken ze respectievelijk toe aan self.fc1, self.fc2 en self.fc3.
  • Geef in de forward()-methode de modelinvoer x door 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
Code bewerken en uitvoeren