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
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 pourfc1. - 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 dereluà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