深度学习(十)——神经网络:非线性激活

深度,学习,神经网络,非线性,激活 · 浏览次数 : 130

小编点评

**Padding Layers** Padding Layers 是一个用于在输入 tensor 数据类型周围填充的层。常用的 padding 层有 `nn.ZeroPad2d` 和 `nn.ConstantPad2d`。 * `nn.ZeroPad2d` 会在输入的 tensor 数据类型周围用 0 进行填充。 * `nn.ConstantPad2d` 会在输入的 tensor 数据类型周围用常数进行填充。 **非线性激活** 非线性激活函数用于为神经网络引入一些非线性特质。常用的非线性激活函数有 `nn.ReLU` 和 `nn.Sigmoid`。 * `nn.ReLU` 计算公式为 `(x)^+max(0,x)`。 * `nn.Sigmoid` 计算公式为 `\\sigma(x)=\\frac{1}{1+exp(-x)}`。 **代码示例** 以下是一个使用 `nn.ReLU` 和 `nn.Sigmoid` 的例子: ```python import torch import torchvision from torch import nn from torch.nn import ReLU,Sigmoid from torch.utils.data import DataLoader input = torch.tensor([[1,-0.5], [-1,3]]) output = torch.reshape(input,(-1,1,2,2)) class Demo(nn.Module): def __init__(self): super(Demo,self).__init__() self.relu1 = ReLU() def forward(self,input): output = self.relu1(input) return output demo = Demo() output = demo(input) print(output) ``` **运行结果** ``` tensor([[1., 0.], [0., 3.]]) ``` **总结** Padding Layers 和非线性激活是神经网络训练中非常重要的技术。Padding Layers 用于在输入 tensor 数据类型周围填充,而非线性激活函数用于引入一些非线性特质。

正文

一、Padding Layers简介

  • nn.ZeroPad2d:在输入的tensor数据类型周围用0进行填充

  • nn.ConstantPad2d:在输入的tensor数据类型周围用常数进行填充

这个函数的主要作用是对输入的图像进行填充,但里面所有功能都能用nn.Conv2d实现。

二、Non-linear Activations

非线性激活主要作用是为神经网络引入一些非线性特质

1. nn.ReLU介绍

class torch.nn.ReLU(inplace=False)

作用:

  • \(input\leq{0}\)\(output=0\)

  • \(input>0\)\(output=input\)

计算公式:

\[ReLU(x)=(x)^+=max(0,x) \]

inplace参数:

  • inplace=True,则会自动替换输入时的变量参数。如:input=-1,ReLU(input,implace=True),那么输出后,input=output=0

  • inplace=True,则不替换输入时的变量参数。如:input=-1,ReLU(input,implace=True),那么输出后,input=-1,output=0

2. nn.Sigmoid介绍

class torch.nn.Sigmoid(*args, **kwargs)

计算公式:

\[Sigmiod(x)=\sigma(x)=\frac{1}{1+exp(-x)} \]

三、代码栗子

1. nn.ReLU函数

import torch
import torchvision
from torch import nn
from torch.nn import ReLU,Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

input=torch.tensor([[1,-0.5],
                    [-1,3]])
output=torch.reshape(input,(-1,1,2,2))

#构建神经网络
class Demo(nn.Module):
    def __init__(self):
        super(Demo,self).__init__()
        self.relu1=ReLU()

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

demo=Demo()
output=demo(input)
print(output)

"""
[Run]
tensor([[1., 0.],
        [0., 3.]])
"""

2. nn.Sigmoid函数

import torch
import torchvision
from torch import nn
from torch.nn import ReLU,Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

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

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

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

demo1=Demo1()
writer=SummaryWriter("logs_sigmoid")
step=0
for data in dataloder:
    imgs,targets=data
    writer.add_images("input",imgs,global_step=step)
    output=demo1(imgs)
    writer.add_images("output",output,global_step=step)
    step+=1
writer.close()

输出结果:

3. 非线性变换的目的

  • 非线性变换的目的是为神经网络引入一些非线性特征,使其训练出一些符合各种曲线或各种特征的模型。

  • 换句话来说,如果模型都是直线特征的话,它的泛化能力会不够好

与深度学习(十)——神经网络:非线性激活相似的内容:

深度学习(十)——神经网络:非线性激活

主要介绍了ReLU和Sigmiod两种非线性激活函数,以及在神经网络中进行非线性转换的目的。

深度学习(十一)——神经网络:线形层及其他层介绍

主要介绍神经网络线性层的计算,即torch.nn.Linear的原理及应用。并插入一些神经网络的其他层介绍,及调用pytorch中网络模型的方法。

深度学习(六)——神经网络的基本骨架:nn.Module的使用

终于卷到神经网络了 ...(˘̩̩̩ε˘̩ƪ)

深度学习(八)——神经网络:卷积层

主要介绍神经网络中的卷积层操作,包括构建卷积层、处理图像、可视化

深度学习(九)——神经网络:最大池化的作用

主要介绍神经网络中的最大池化操作,以及最大池化的作用

深度学习(七)——神经网络的卷积操作

关于torch.nn.functional操作的深入理解,主要介绍卷积计算过程。

构建基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统(Python3.10/Tensorflow2.11)

毋庸讳言,和传统架构(BS开发/CS开发)相比,人工智能技术确实有一定的基础门槛,它注定不是大众化,普适化的东西。但也不能否认,人工智能技术也具备像传统架构一样“套路化”的流程,也就是说,我们大可不必自己手动构建基于神经网络的机器学习系统,直接使用深度学习框架反而更加简单,深度学习可以帮助我们自动地从原始数据中提取特征,不需要手动选择和提取特征。

Python TensorFlow深度学习回归代码:DNNRegressor

本文介绍基于Python语言中TensorFlow的tf.estimator接口,实现深度学习神经网络回归的具体方法~

深度学习(十二)——神经网络:搭建小实战和Sequential的使用

“搭个网络真不难,像呼吸一样简单。”周华健学长如是地说(狗头)

神经网络常见参数解释:epoch、batch、batch size、step、iteration

本文介绍在机器学习、深度学习的神经网络模型中,epoch、batch、batch size、step与iteration等名词的具体含义~