PyTorch-modell
Du ska använda det objektorienterade programmeringsättet för att definiera modellarkitekturen. Det innebär att du skapar en modellklass och definierar två metoder i den:
.__init__(), där du definierar de lager du vill använda;forward(), där du definierar vad som händer med modellens indata när den tar emot dem – det är här du skickar indata genom de fördefinierade lagren.
Låt oss bygga en modell med tre linjära lager och ReLU-aktiveringar. Efter det sista linjära lagret behöver du en sigmoid-aktivering i stället, vilket passar bra för binära klassificeringsuppgifter som vårt problem med dricksvattenbedömning. Här är modellen definierad med nn.Sequential(), som du kanske är mer bekant med:
net = nn.Sequential(
nn.Linear(9, 16),
nn.ReLU(),
nn.Linear(16, 8),
nn.ReLU(),
nn.Linear(8, 1),
nn.Sigmoid(),
)
Låt oss skriva om den här modellen som en klass!
Den här övningen är en del av kursen
Fördjupad djupinlärning med PyTorch
Övningsinstruktioner
- I metoden
.__init__()definierar du de tre linjära lagren med dimensioner som motsvarar den angivna modelldefinitionen och tilldelar dem tillself.fc1,self.fc2respektiveself.fc3. - I metoden
forward()skickar du modellens indataxgenom alla lager och lägger till aktiveringar efter dem, på liknande sätt som redan görs för det första lagret.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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