LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

  • Rufe den He-(Kaiming)-Initialisierer für das Gewichtsattribut der zweiten Schicht, fc2, auf, ähnlich wie es für fc1 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 von relu zu elu.

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
Code bearbeiten und ausführen