重生学AI第十五集:学习非线性激活函数

背景知识

激活是什么意思?

“激活”一词来源于生物学神经系统,在人的大脑中,存在着大量的神经元。每个神经元在接收到足够强的刺激时,会被激活,产生电信号并传递给其他神经元。这些电信号在神经网络中层层流动,最终形成了大脑对外界信息的反应。


神经元就等同于人工神经网络中的基本计算单元,每一个网络层都包含着许多这样的神经元,激活函数就是为了能够判断输入是否达到“激活”标准,达到激活标准,则会影响后续计算,反之,则不会

再来说非线性,非线性的目的是为了能够让模型学会复杂的、非线性的关系,如果没有非线性激活函数,模型永远“长不大”。

了解了这些,我们就可以来看官方文档了,官方文档中有很多非线性激活函数:

重生学AI第十五集:学习非线性激活函数_第1张图片

今天学习其中的两个nn.Relunn.Sigmoid

nn.Relu

nn.Relu,全名是 Rectified Linear Unit(线性整流函数),是 PyTorch 中使用最广泛的非线性激活函数之一。他的作用就是将输入中小于0的元素变成0(未激活),大于0则保持不变(激活)

参数:

  • inplace:是否替换掉原始数据,默认为False
    • False:代表不改变原始数据
    • True:将新数据替换掉原始数据
    • 结果都是返回修改后的数据,只不过为True时,原始数据会被改为新数据

代码能够帮我们更加深入的理解

import torch
from torch import nn

input1 = torch.tensor([[5, 25, -5, -25],
                       [0.5, 2.5, -0.5, -2.5]])


class ReluModel(nn.Module):
    def __init__(self):
        super(ReluModel, self).__init__()
        self.relu = nn.ReLU(inplace=True)

    def forward(self, x):
        output = self.relu(x)
        return output


remodel = ReluModel()
output = remodel(input1)
print(input1)
print(output)

输出结果:

重生学AI第十五集:学习非线性激活函数_第2张图片

分析:

  • 原始数据中的负数都变为了0
  • 原始数据被改为新数据

将inplace改为false,再运行一下,结果如下:

重生学AI第十五集:学习非线性激活函数_第3张图片

这里为什么会显示4位小数呢?

因为PyTorch 默认显示小数点后 4 位,是为了统一格式和方便调试。这么做只是为了显示精度,并不影响实际计算和数据精度。

nn.Sigmoid

nn.Sigmoid,全名是 Logistic Sigmoid,他的作用是把输入的任意实数映射到(0,1)之间,即:非1即0,常用于二分类任务,比如:这张图像是不是猫?这段话是不是英文?

这个激活函数不需要参数

跑一下代码:

import torch
from torch import nn

input1 = torch.tensor([[5, 25, -5, -25],
                       [0.5, 2.5, -0.5, -2.5]])


class SigmoidModel(nn.Module):
    def __init__(self):
        super(SigmoidModel, self).__init__()
        self.sigmoid = nn.Sigmoid()


    def forward(self, x):
        output = self.sigmoid(x)
        return output


remodel = SigmoidModel()
output = remodel(input1)
print(output)

结果:

重生学AI第十五集:学习非线性激活函数_第4张图片

展示的时候用了科学计数法,第一组数据约为:0.9933,1.0,0.0067,1.38*10^-11(最接近0)

第二组数据约为:0.6225,0.9241,0.3775,0.0759

拜拜

重生学AI第十五集:学习非线性激活函数_第5张图片

你可能感兴趣的:(重生学AI第十五集:学习非线性激活函数)