CommencerCommencer gratuitement

Initialisation et activation

Les problèmes de gradients instables (qui s’annulent ou explosent) sont un défi fréquent lors de l’entraînement de réseaux de neurones 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 moins sensible à 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 cela, vous devez appeler l’initialiseur approprié depuis le module torch.nn.init, qui a été importé pour vous sous le nom init. Ensuite, vous remplacerez les fonctions d’activation par défaut ReLU par ELU, souvent plus efficace.

Cet exercice fait partie du cours

Deep learning intermédiaire avec PyTorch

Afficher le cours

Instructions

  • Appelez l’initialiseur de He (Kaiming) sur l’attribut de poids de la deuxième couche, fc2, de la même manière 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 cet exemple de code.

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