CommencerCommencer gratuitement

Initialisation et activation

Les problèmes de gradients instables (qui s'évanouissent ou qui explosent) sont un défi qui se pose souvent lors de l'apprentissage de réseaux neuronaux profonds. Dans cet exercice et les suivants, vous développerez l'architecture du modèle que vous avez construit pour la tâche de classification de la potabilité de l'eau afin de mieux l'immuniser contre ces problèmes.

Dans un premier temps, vous améliorerez l'initialisation des poids en utilisant la stratégie d'initialisation He (Kaiming). Pour ce faire, vous devrez appeler l'initialisateur approprié à partir du module torch.nn.init, qui a été importé pour vous sous le nom de init. Ensuite, vous mettrez à jour les fonctions d'activation en passant de la ReLU par défaut à la ELU, souvent plus performante.

Cet exercice fait partie du cours

Apprentissage profond intermédiaire avec PyTorch

Afficher le cours

Instructions

  • Appelez l'initialisateur He (Kaiming) sur l'attribut de poids de la deuxième couche, fc2, de la même manière que pour fc1.
  • Appelez l'initialisateur 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 dernière couche.
  • Mettez à jour les fonctions d'activation dans la méthode forward() 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