Model PyTorch
Do zdefiniowania architektury modelu użyjesz podejścia obiektowego (OOP). Wymaga to stworzenia klasy modelu i zdefiniowania w niej dwóch metod:
.__init__(), w której definiujesz warstwy, których chcesz użyć;forward(), w której określasz, co dzieje się z danymi wejściowymi po ich otrzymaniu przez model – tutaj przepuszczasz dane przez wcześniej zdefiniowane warstwy.
Zbudujmy model z trzema warstwami liniowymi i aktywacjami ReLU. Po ostatniej warstwie liniowej potrzebna jest aktywacja sigmoidalna, która dobrze sprawdza się w zadaniach klasyfikacji binarnej, takich jak przewidywanie zdatności wody do picia. Oto model zdefiniowany przy użyciu nn.Sequential(), z którym możesz być już zaznajomiony:
net = nn.Sequential(
nn.Linear(9, 16),
nn.ReLU(),
nn.Linear(16, 8),
nn.ReLU(),
nn.Linear(8, 1),
nn.Sigmoid(),
)
Przepiszmy teraz ten model jako klasę!
To ćwiczenie jest częścią kursu
Głębokie uczenie z PyTorch – poziom średnio zaawansowany
Instrukcje do ćwiczenia
- W metodzie
.__init__()zdefiniuj trzy warstwy liniowe o wymiarach odpowiadających podanej definicji modelu i przypisz je odpowiednio doself.fc1,self.fc2iself.fc3. - W metodzie
forward()przepuść dane wejściowexprzez wszystkie warstwy, pamiętając o dodaniu funkcji aktywacji po każdej z nich – podobnie jak zrobiono to już dla pierwszej warstwy.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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