Dropout正则化
在神经网络中模型参数较多,在数据量不足的情况下,很容易过拟合。Dropout(随机失活)是一个简单有效的正则化方法。
- 在训练过程中,Dropout的实现是让神经元以超参数\(p\)的概率停止工作或者激活被置为0,未被置为0的进行缩放,缩放比例为\(1/(1-p)\)。训练过程可以认为是对完整的神经网络的一些子集进行训练,每次基于输入数据只更新子网络的参数。
- 在测试过程中,随机失活不起作用。
代码实现
导包
import torch
import torch.nn as nn
1.定义函数,演示:随机失活(DropOut)
def dm01():# 1. 创建隐藏层输出结果t1 = torch.randint(0,10,size=(1,4)).float()print(f't1:{t1}')# 2. 进行下一层 加权求和,激活函数计算.# 2.1 创建全连接层(充当线性层)# 参1:输入特征维度;参2:输出特征维度linear1 = nn.Linear(4,5)# 2.2 加权求和l1 = linear1(t1)print(f'l1:{l1}')# 2.3 激活函数output = torch.relu(l1)print(f'output:{output}')# 3. 对激活值进行随机失活dropout处理 ——> 只有训练阶段有,测试阶段没有dropout = nn.Dropout(p=0.5) # 每个神经元都有40%的概率被killd1 = dropout(t1)print(f'd1:{d1}') # 未被失活的进行缩放,缩放比例为 1 / (1 - p)
2.测试
dm01()