IniziaInizia gratis

Inizializzazione e attivazione

I problemi di gradienti instabili (che svaniscono o esplodono) sono una sfida che spesso emerge nell’addestramento di reti neurali profonde. In questo e nei prossimi esercizi, estenderai l’architettura del modello che hai costruito per il task di classificazione della potabilità dell’acqua per renderla più resistente a questi problemi.

Come primo passo, migliorerai l’inizializzazione dei pesi usando la strategia di inizializzazione di He (Kaiming). Per farlo, dovrai chiamare l’inizializzatore appropriato dal modulo torch.nn.init, che è stato importato per te come init. Poi, aggiornerai le funzioni di attivazione passando dalla ReLU predefinita alla spesso migliore ELU.

Questo esercizio fa parte del corso

Deep Learning intermedio con PyTorch

Visualizza il corso

Istruzioni dell'esercizio

  • Applica l’inizializzatore di He (Kaiming) all’attributo dei pesi del secondo livello, fc2, in modo analogo a quanto fatto per fc1.
  • Applica l’inizializzatore di He (Kaiming) all’attributo dei pesi del terzo livello, fc3, tenendo conto della diversa funzione di attivazione usata nel livello finale.
  • Aggiorna le funzioni di attivazione nel metodo forward() da relu a elu.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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
Modifica ed esegui il codice