💻 源码
"""
演示
    dropout随机失活

注意:
    dropout是一个特殊的网络层,没有可训练的参数,只有一个超参数p。dropout层通常添加到输出层之前

正则化作用:
    缓解模型过拟合,提高模型泛化能力
正则化的方法:
    L1正则化:在损失函数中添加绝对值项|w|, 权重可以为0,相当于降维
    L2正则化:在损失函数中添加平方项w^2, 权重可以接近0,Adam/AdamW权重衰减,对离散值敏感

    Dropout随机失活:
        1.训练时,model.train(),随机以概率p让一部分神经元失活,输出设置为0。没有失活的神经元的输出*1/(1-p)
        2.测试时,model.eval(),关闭dropout随机失活,让所有神经元一起参与

需要掌握:
    nn.Dropout(p=0.1)
    参数p设置:0<p<1,通常p<0.5, 当模型参数较多 数据量较大 时,可以适当增加p,比如0.4~0.5
"""
# 导包
import torch
import torch.nn as nn

# 1.定义函数,演示 dropout随机失活
def demo01():
    # 0.设置随机种子
    torch.manual_seed(50)
    # 1.创建输入数据,(batch_size,input_dim)
    x = torch.randint(0,10,(1,5),dtype=torch.float32)
    print(f"x: {x},x.shape: {x.shape}")
    # 2.创建神经网络,一个简单的线性层
    linear1 = nn.Linear(5,20)
    # 3.创建一个dropout层,来实现dropout随机失活
    dropout = nn.Dropout(p=0.5)
    # 4.把数据输入到线性层
    x = linear1(x)  # (1,5) -> (1,20)
    print(f"x: {x},x.shape: {x.shape}")
    # 5.把数据输入到droput层
    x = dropout(x)
    # 6.打印dropout输出
    print(f"x: {x},x.shape: {x.shape}")
    ...

# 测试
if __name__ == '__main__':
    demo01()