CommencezCommencez gratuitement

Initialisation et activation

Les problèmes de gradients instables (qui s'évanouissent ou explosent) constituent un défi fréquent lors de l'entraînement de réseaux neuronaux profonds. Dans cet exercice et les suivants, vous allez étendre l'architecture du modèle que vous avez construite pour la classification de la potabilité de l'eau afin de la rendre plus résistante à ces problèmes.

Comme première étape, vous améliorerez l'initialisation des poids en utilisant la stratégie d'initialisation de He (Kaiming). Pour ce faire, vous devrez appeler l'initialiseur approprié du module torch.nn.init, qui a été importé pour vous sous le nom init. Ensuite, vous remplacerez les fonctions d'activation ReLU par défaut par ELU, souvent plus performante.

Cette activité fait partie du cours

Apprentissage profond intermédiaire avec PyTorch

Voir le cours

Instructions de l’exercice

  • Appelez l'initialiseur de He (Kaiming) sur l'attribut de poids de la deuxième couche, fc2, de la même façon que pour fc1.
  • Appelez l'initialiseur de He (Kaiming) sur l'attribut de poids de la troisième couche, fc3, en tenant compte de la fonction d'activation différente utilisée dans la couche finale.
  • Mettez à jour les fonctions d'activation dans la méthode forward() en passant de relu à elu.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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
Modifier et exécuter le code