Relu和dropout的理解

69 篇文章 8 订阅
8 篇文章 1 订阅
该代码示例展示了ReLU激活函数和Dropout正则化的应用。ReLU激活函数用于处理梯度消失问题,加快训练速度,它将负值置零以实现非线性转换。Dropout则通过以一定概率随机关闭神经元来防止过拟合,保持网络的泛化能力。在给定的示例中,Dropout以0.5的概率丢弃元素,确保期望值不变。
摘要由CSDN通过智能技术生成

先看代码

def dropout_layer(X, dropout):
    """该函数以dropout的概率丢弃张量输入X中的元素 """
    assert 0 <= dropout <= 1
    # 在本情况中,所有元素都被丢弃。
    if dropout == 1:
        return torch.zeros_like(X)   
    # 在本情况中,所有元素都被保留。即不用丢弃
    if dropout == 0:
        return X
    mask = (torch.randn(X.shape) > dropout).float()
    # 除以1-p是为了保证期望不变即 E(x) = P*0 + (1-p)*(X/(1-p)) 
    return mask * X / (1.0 - dropout)

x = torch.arange(-1.0, 1.0, 0.1, requires_grad=True)
print('x\n', x)
y = torch.relu(x) 
print('y\n', y)
print(dropout_layer(y, 0.5))

输出结果:

x
 tensor([-1.0000, -0.9000, -0.8000, -0.7000, -0.6000, -0.5000, -0.4000, -0.3000,
        -0.2000, -0.1000,  0.0000,  0.1000,  0.2000,  0.3000,  0.4000,  0.5000,
         0.6000,  0.7000,  0.8000,  0.9000], requires_grad=True)
y
 tensor([0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
        0.0000, 0.0000, 0.1000, 0.2000, 0.3000, 0.4000, 0.5000, 0.6000, 0.7000,
        0.8000, 0.9000], grad_fn=<ReluBackward0>)
tensor([0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
        0.0000, 0.0000, 0.0000, 0.0000, 0.6000, 0.8000, 1.0000, 0.0000, 1.4000,
        0.0000, 0.0000], grad_fn=<DivBackward0>)

结论:

从输出的结果上来看,relu激活函数的作用是决定那个神经元有效即那个神经元被激活,但并不修改其值,而dropout的作用不光是激活那个神经元,而且还保证了其期望值不会变

Relu的作用:

  • 1、克服梯度消失的问题

  • 2、加快训练速度

详细说明点击进入

dropout的作用:

  • 1、避免过拟合,增强了泛化能力

详细说明点击进入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值