Initialisierung und Aktivierung
Die Probleme instabiler (verschwindender oder explodierender) Gradienten sind eine Herausforderung, die häufig beim Training tiefer neuronaler Netze auftritt. In dieser und den folgenden Aufgaben wirst du die Modellarchitektur, die du für die Klassifizierung der Wasserqualität erstellt hast, erweitern, um sie resistenter gegen diese Probleme zu machen.
Als ersten Schritt wirst du die Gewichtungsinitialisierung durch die Verwendung der He-(Kaiming)-Initialisierungsstrategie verbessern. Dafür musst du den entsprechenden Initialisierer aus dem torch.nn.init
-Modul aufrufen, das für dich als init
importiert wurde. Als Nächstes wirst du die Aktivierungsfunktionen von der Standard-ReLU zur häufig besseren ELU aktualisieren.
Diese Übung ist Teil des Kurses
Deep Learning mit PyTorch für Fortgeschrittene
Anleitung zur Übung
- Rufe den He-(Kaiming)-Initialisierer für das Gewichtsattribut der zweiten Schicht,
fc2
, auf, ähnlich wie es fürfc1
gemacht wird. - Rufe den He-(Kaiming)-Initialisierer für das Gewichtsattribut der dritten Schicht,
fc3
, auf und berücksichtige dabei die andere Aktivierungsfunktion, die in der letzten Schicht verwendet wird. - Aktualisiere die Aktivierungsfunktionen in der
forward()
-Methode vonrelu
zuelu
.
Interaktive Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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