Inicjalizacja i aktywacje
Niestabilne gradienty (zanikające lub eksplodujące) to problem, który często pojawia się podczas trenowania głębokich sieci neuronowych. W tym i kolejnym ćwiczeniu rozbudujesz architekturę modelu zbudowanego do zadania klasyfikacji jakości wody, aby zwiększyć jego odporność na te problemy.
W pierwszym kroku ulepszysz inicjalizację wag, stosując strategię inicjalizacji He (Kaiming). W tym celu wywołasz odpowiednią funkcję inicjalizującą z modułu torch.nn.init, który został zaimportowany jako init. Następnie zaktualizujesz funkcje aktywacji – zamienisz domyślną ReLU na często skuteczniejszą ELU.
To ćwiczenie jest częścią kursu
Głębokie uczenie z PyTorch – poziom średnio zaawansowany
Instrukcje do ćwiczenia
- Wywołaj inicjalizator He (Kaiming) na atrybucie wag drugiej warstwy,
fc2, analogicznie do tego, jak zostało to zrobione dlafc1. - Wywołaj inicjalizator He (Kaiming) na atrybucie wag trzeciej warstwy,
fc3, uwzględniając inną funkcję aktywacji użytą w ostatniej warstwie. - Zaktualizuj funkcje aktywacji w metodzie
forward(), zastępującreluprzezelu.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
class Net(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(9, 16)
self.fc2 = nn.Linear(16, 8)
self.fc3 = nn.Linear(8, 1)
# Apply He initialization
init.kaiming_uniform_(self.fc1.weight)
____(____)
____(____, ____)
def forward(self, x):
# Update ReLU activation to ELU
x = nn.functional.relu(self.fc1(x))
x = nn.functional.relu(self.fc2(x))
x = nn.functional.sigmoid(self.fc3(x))
return x