MaxPool2d及非线性激活函数ReLU、Sigmoid的使用

这篇文章是神经网络系列之MaxPool2d及非线性激活函数ReLU、Sigmoid的使用


一、前言

首先介绍一下MaxPool,根据以下内容,可以初步了解各个参数的含义。


 其中dilation的意思可见图所示conv_arithmetic/README.md at master · vdumoulin/conv_arithmetic · GitHub

 ceil_mode=True时,代表最大池化时,不足卷积核的地方的值也取最大,不舍弃。   ceil_mode=False时,代表最大池化时,不足卷积核的地方的值不取值,舍弃。

二、代码

1.样例

代码如下(示例):

import torch
from torch import nn
from torch.nn import MaxPool2d

input=torch.tensor([[1,2,0,3,1],
                    [0,1,2,3,1],
                    [1,2,1,0,0],
                    [5,2,3,1,1],
                    [2,1,0,1,1]])
input=torch.reshape(input,[-1,1,5,5])
print(input)
class Tudui(nn.Module):
    def __init__(self):
        super(Tudui, self).__init__()
        self.maxpool1=MaxPool2d(kernel_size=3,ceil_mode=True)

    def forward(self,input):
        output=self.maxpool1(input)
        return output
tudui=Tudui()
output=tudui(input)
print(output)

报错:

改正措施:在输入矩阵后面加上dtype=torch.float32,变成浮点类型,即可

input=torch.tensor([[1,2,0,3,1],
                    [0,1,2,3,1],
                    [1,2,1,0,0],
                    [5,2,3,1,1],
                    [2,1,0,1,1]],dtype=torch.float32)

 成果展示:

2.激活函数ReLU

简介:所谓激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型

 ReLU激活函数使用方法及对应曲线如下图所示。

代码如下(示例):

import torch
from torch import nn
from torch.nn import ReLU

input=torch.tensor([[1,-0.5],
                    [-1,3]])
input=torch.reshape(input,[-1,1,2,2])  #防止报维度的错
print(input.shape)
class Tudui(nn.Module):
    def __init__(self):
        super(Tudui, self).__init__()
        self.relu1=ReLU()

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

tudui=Tudui()
output=tudui(input)
print(output)

成果展示:


 3、激活函数Sigmoid的使用

简介:它和ReLU的使用方式一样,就是曲线有些区别,下图是它的曲线图,以及用它写的函数,做的成果展示。

成果展示:

三、总结

以上内容均是参考土堆老师视频做的笔记。

神经网络-非线性激活_哔哩哔哩_bilibili

猜你喜欢

转载自blog.csdn.net/weixin_69398563/article/details/126355398