Inicializace a aktivační funkce
Nestabilní gradienty – ať už mizející, nebo explodující – jsou jednou z častých překážek při trénování hlubokých neuronových sítí. V tomto a v následujícím cvičení rozšíříš architekturu modelu, který jsi sestavil/a pro klasifikaci pitnosti vody, aby byl vůči těmto problémům odolnější.
Prvním krokem je vylepšení inicializace vah pomocí He (Kaimingovy) inicializační strategie. K tomu zavoláš příslušnou inicializační funkci z modulu torch.nn.init, který je pro tebe importován jako init. Následně aktualizuješ aktivační funkce – místo výchozího ReLU použiješ často výkonnější ELU.
Toto cvičení je součástí kurzu
Intermediate Deep Learning with PyTorch
Pokyny k cvičení
- Zavolej He (Kaimingův) inicializátor na atribut weight druhé vrstvy,
fc2, stejným způsobem jako ufc1. - Zavolej He (Kaimingův) inicializátor na atribut weight třetí vrstvy,
fc3, a přitom zohledni jinou aktivační funkci použitou v poslední vrstvě. - V metodě
forward()nahraď aktivační funkcereluzaelu.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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