初始化與啟動函式
不穩定梯度(消失或爆炸)是訓練深層神經網路時常見的挑戰。在這個練習與接下來的練習中,你會擴充先前為飲用水可飲性分類任務所建立的模型架構,讓它更能避免這些問題。
首先,你會改進權重初始化,改用 He(Kaiming)初始化策略。為此,你需要從已為你匯入並命名為 init 的 torch.nn.init 模組中,呼叫適當的初始化器。接著,你會把啟動函式從預設的 ReLU 更新為經常更佳的 ELU。
本練習屬於課程
Intermediate Deep Learning with PyTorch
練習說明
- 針對第二層
fc2的權重屬性呼叫 He(Kaiming)初始化器,作法與fc1相同。 - 針對第三層
fc3的權重屬性呼叫 He(Kaiming)初始化器,並考量最終層所使用的不同啟動函式。 - 在
forward()方法中,將啟動函式從relu更新為elu。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
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