Inițializare și activare
Gradienții instabili (care dispar sau explodează) reprezintă o provocare frecventă în antrenarea rețelelor neuronale profunde. În acest exercițiu și în cel următor, vei extinde arhitectura modelului construit pentru sarcina de clasificare a potabilității apei, pentru a-l face mai rezistent la aceste probleme.
Ca prim pas, vei îmbunătăți inițializarea ponderilor folosind strategia de inițializare He (Kaiming). Pentru aceasta, va trebui să apelezi inițializatorul corespunzător din modulul torch.nn.init, care a fost importat ca init. Apoi, vei actualiza funcțiile de activare, înlocuind ReLU implicit cu ELU, adesea mai performant.
Acest exercițiu face parte din cursul
Deep Learning intermediar cu PyTorch
Instrucțiuni pentru exercițiu
- Aplică inițializatorul He (Kaiming) pe atributul weight al celui de-al doilea strat,
fc2, similar cu modul în care este aplicat pentrufc1. - Aplică inițializatorul He (Kaiming) pe atributul weight al celui de-al treilea strat,
fc3, ținând cont de funcția de activare diferită folosită în stratul final. - Actualizează funcțiile de activare din metoda
forward(), înlocuindrelucuelu.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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