初始化与激活函数
不稳定梯度(梯度消失或爆炸)是训练深层神经网络时常见的挑战。在本题及接下来的练习中,您将扩展此前为饮用水可饮用性分类任务构建的模型结构,使其更能抵御这些问题。
第一步,使用 He(Kaiming)初始化策略来改进权重初始化。为此,您需要从 torch.nn.init 模块调用合适的初始化器,该模块已作为 init 导入。接着,您还将把激活函数从默认的 ReLU 更新为通常效果更好的 ELU。
本练习是课程的一部分
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