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
Instructions
- Appelez l'initialisateur He (Kaiming) sur l'attribut de poids de la deuxième couche,
fc2
, de la même manière que pourfc1
. - 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()
derelu
à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