Datawhale_pytorch L1 L2正则化 dropout
程序员文章站
2022-07-13 10:38:22
...
【Task5】PyTorch实现L1,L2正则化以及Dropout
- 了解知道Dropout原理
- 用代码实现正则化(L1、L2、Dropout)
- Dropout的numpy实现
- PyTorch中实现dropout
正则化原理:
L1与L2正则化是为了防止参数过多或过大,模型过于复杂而在代价函数上加入的有关神经元连接权重的正则化项,L1与L2正则化分别在代价函数后添加不同正则化项,导致模型结果也不同,但二者都可以有效降低过拟合风险。
dropout,即随机失活,也是一种正则化方法。dropout是指在神经网络的每次训练中以一个参数p为概率,使部分隐层部分神经元失活,以此来解决过拟合问题,效果可以当作用多个不同的神经网络模型在同一训练集上进行训练,最后集成求平均。dropout还可以消除某些神经元之间的联系,增强模型的鲁棒性。
代码实现:
L1正则化实现,在Task04基础上,对代价函数添加L1正则化项,相关代码如下:
regularization_loss = 0
for param in model.parameters():
regularization_loss += torch.sum(abs(param))
for epoch in range(EPOCHS):
y_pred = model(x_train)
classify_loss = criterion(y_pred, y_train.float().view(-1, 1))
loss = classify_loss + 0.001 * regularization_loss # 引入L1正则化项
L2正则化实现,因为pytorch的优化器函数中包含L2正则化方法,所以可直接调用:
optimizer = torch.optim.SGD(model.parameters(), lr=1e-1, momentum=0.9, weight_decay=0.001) # weight_decay项即为L2正则化项
dropout实现,pytorch中亦有droput函数,在Task01最后的代码示例上进行修改:
model = nn.Sequential(nn.Linear(n_in, n_h),
torch.nn.Dropout(0.5), # 0.5的概率失活
nn.ReLU(),
nn.Linear(n_h, n_out),
torch.nn.Dropout(0.5),
nn.Sigmoid())