Initialisatie en activatie
De problemen met onstabiele (vervaagende of exploderende) gradiënten komen vaak voor bij het trainen van diepe neurale netwerken. In deze en de volgende oefeningen breid je de modelarchitectuur uit die je bouwde voor de waterpotability-classificatietaak, zodat het model beter bestand is tegen die problemen.
Als eerste stap verbeter je de initialisatie van de gewichten met de He (Kaiming) initialisatiestrategie. Hiervoor roep je de juiste initializer aan uit de module torch.nn.init, die voor je is geïmporteerd als init. Vervolgens vervang je de activatiefuncties van de standaard ReLU naar de vaak betere ELU.
Deze oefening maakt deel uit van de cursus
Gevorderde Deep Learning met PyTorch
Oefeninstructies
- Roep de He (Kaiming) initializer aan voor het
weight-attribuut van de tweede laag,fc2, op dezelfde manier als voorfc1. - Roep de He (Kaiming) initializer aan voor het
weight-attribuut van de derde laag,fc3, rekening houdend met de andere activatiefunctie in de laatste laag. - Vervang in de methode
forward()de activatiefuncties vanrelunaarelu.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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