神经网络—非线性激活中ReLU函数和Sigmoid函数的使用

非线性激活在神经网络的搭建中很重要,我们可以简单的理解为非线性变化的目的就是为神经网络中引入非线性特征,这样才能训练出符合各种特征,各种曲线的模型。



一、激活函数是什么

激活函数是指在多层神经网络中,上层神经元的输出和下层神经元的输入存在一个函数关系,这个函数就是激活函数。
可以这样理解:上层神经元通过加权求和,得到输出值,然后被作用于一个激活函数,得到下一层的输入值。引入激活函数的目的是为了增加神经网络的非线性拟合能力。

二、非线性激活函数ReLU和Sigmoid的使用

1.ReLU函数

1.1 ReLU函数的官方文档

torch.nn.ReLU(inplace=False)

非常简单。其中只有一个参数。

inplace - 可以选择就地执行操作。 默认值:False,可以保留原始数据。

Shape:
Input: (*)(∗),   其中 *∗ 表示任意数量的维度。
Output: (*)(∗),   与输入的形状相同。

1.2 实例练习

代码如下:

import torch
from torch import nn

#输入数组
input = torch.tensor([[1, -2],
                      [-1.5, 3]])

#查看数组类型 ——> torch.Size([2, 2])
print(input.shape)

#改变尺寸  ——>  torch.Size([1, 1, 2, 2])
input2 = torch.reshape(input, [-1, 1, 2, 2])   #数量N不知道,可以输入-1,根据后面可以自动推出N值
print(input2.shape)

#搭建神经网络
class Test(nn.Module):
    def __init__(self):
        super(Test, self).__init__()
        self.input = torch.nn.ReLU()

    def forward(self, x):
        x = self.input(x)
        return x

#创建神经网络
test = Test()
output1 = test(input)
output2 = test(input2)
print(output1)
print(output2)

输出结果:
torch.Size([2, 2])
torch.Size([1, 1, 2, 2])
tensor([[1., 0.],
        [0., 3.]])
tensor([[[[1., 0.],
          [0., 3.]]]])

可以发现,input任意数量的维度,都可以执行。

2.Sigmoid函数

2.1Sigmoid函数的官方文档

torch.nn.Sigmoid

Shape:
Input: (*)(∗),   其中 *∗ 表示任意数量的维度。
Output: (*)(∗),   与输入的形状相同。

非常简单,同ReLU函数一样。


 Sigmoid函数是常用的连续、平滑的s型激活函数,也被称为逻辑(Logistic)函数。可以将一个实数映射到(0,1)的区间,用来做二分类。

2.2 实例练习

代码如下:

import torch.nn
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

#准备测试数据集并转为tensor类型
dataset = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor(),
                                       download=True)
#使用dataloder数据迭代器,为神经网络提供数据
dataloader = DataLoader(dataset, batch_size=64, drop_last=False)

#搭建神经网络
class Test(nn.Module):
    def __init__(self):
        super(Test, self).__init__()
        self.input = torch.nn.Sigmoid()

    def forward(self, x):
        x = self.input(x)
        return x

#此计算机网络,初始化
test = Test()

#使用tensorboard
writer = SummaryWriter("logs")
step = 0
#使用for循环,查看数据
for data in dataloader:
    imgs, targets = data
    writer.add_images("input", imgs, step)  #查看输入数据
    output = test(imgs)
    writer.add_images("output", output, step)
    step += 1

writer.close()

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓亮.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值