Initialisering och aktivering
Instabila gradienter – antingen försvinnande eller exploderande – är ett vanligt problem vid träning av djupa neurala nätverk. I den här och nästa övning bygger du vidare på den modellarkitektur du skapade för klassificering av vattenrenhet, och gör den mer robust mot dessa problem.
Som ett första steg förbättrar du viktinitaliseringen med He (Kaiming)-strategin. För att göra det anropar du rätt initialiserare från modulen torch.nn.init, som redan har importerats som init. Därefter uppdaterar du aktiveringsfunktionerna från standardalternativet ReLU till den ofta bättre ELU.
Den här övningen är en del av kursen
Fördjupad djupinlärning med PyTorch
Övningsinstruktioner
- Anropa He (Kaiming)-initialiseraren på viktattributet för det andra lagret,
fc2, på samma sätt som det görs förfc1. - Anropa He (Kaiming)-initialiseraren på viktattributet för det tredje lagret,
fc3, och ta hänsyn till den aktiveringsfunktion som används i det sista lagret. - Uppdatera aktiveringsfunktionerna i metoden
forward()frånrelutillelu.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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