Pytorch学习笔记--非线性变换(ReLU,Sigmoid)

两者各自的作用,网上给出这种解释:

在深度学习中,非线性变换函数起着至关重要的作用,常见的激活函数包括ReLU(Rectified Linear Unit)和Sigmoid。这两种激活函数的作用有所不同,下面分别介绍它们的特点及作用:

Sigmoid

  1. 定义:Sigmoid函数的公式为 𝑆(𝑥)=11+𝑒−𝑥S(x)=1+e−x1​。它的输出范围在0到1之间。

  2. 非线性:Sigmoid是一个非线性函数,这意味着即使输入是线性的组合,经过Sigmoid变换后会得到非线性输出,这样可以引入模型的非线性能力。

  3. 输出范围:由于Sigmoid的输出在0和1之间,它常用于二分类问题的输出层,以产生概率值。

  4. 梯度消失问题:Sigmoid函数在输入值非常大或非常小时,导数接近于0,这可能导致在反向传播中梯度消失,从而减慢网络的学习速度或导致网络无法有效训练。

  5. 在深度学习中的应用:尽管Sigmoid曾经在早期的神经网络中广泛使用,但随着深度学习的发展,特别是在深层网络中,由于其梯度消失问题,Sigmoid逐渐被ReLU等其他激活函数所替代。

ReLU

  1. 定义:ReLU函数的公式为 𝑓(𝑥)=max⁡(0,𝑥)f(x)=max(0,x)。它将所有负输入设置为0,正输入保持不变。

  2. 非线性:ReLU也是非线性的,可以有效地提供模型的非线性能力。

  3. 计算效率:ReLU的计算方式简单,只有在输入为负时才能得到0,对于正输入,它的输出与输入相同,计算非常高效。

  4. 避免梯度消失:相较于Sigmoid,ReLU在正区间的梯度始终为1,这有助于缓解梯度消失的问题,促进更快的收敛。

  5. 死亡ReLU问题:虽然ReLU有诸多优点,但在训练过程中,部分神经元可能会因为权重调整不当而始终输出0,导致这些神经元“死亡”,无法再参与学习。

总结来说,Sigmoid函数适用于需要输出概率的场合,尤其是在二分类问题的输出层,而ReLU则常用于隐藏层激活,尤其是在深层网络中,因为它既简单又高效。同时由于ReLU的特点,许多其他改进版的激活函数(如Leaky ReLU、Parametric ReLU等)也被提出以克服ReLU的一些缺陷。

在代码中应用,再使用tensorboard查看使用激活函数前后图片的对比:

from linecache import cache
import torchvision.datasets
from torch import nn
from torch.nn.quantized import Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from torch.nn import ReLU
from py.TensorBoard import write
from py.nn_conv2d import dataset, dataloader, output, targets, writer


dataset=torchvision.datasets.CIFAR10("../data",train=False,download=True,transform=torchvision.transforms.ToTensor())
dataloader=DataLoader(dataset,batch_size=64)

class Aaax(nn.Module):
    def __init__(self):
        super(Aaax,self).__init__()
        self.relu1=ReLU()
        self.sigmoid1=nn.Sigmoid()

    def forward(self,input):
        output=self.sigmoid1(input)
        return  output

aa=Aaax()
writer = SummaryWriter("./logs_ReLU")
step=0
for i in dataloader:
    imgs,targets=i
    writer.add_images("input",imgs,step)
    output=aa(imgs)
    writer.add_images("output",output,step)
    step+=1

write.close()

再使用tensorboard查看非线性变换后的结果:

学习内容来自b站小土堆,仅用作记录学习,切勿商用。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值