深度之眼Pytorch框架训练营第四期——池化、线性、激活函数层

九、池化、线性、激活函数层

1、池化层(Pooling Layer
(1)概述
  • 池化运算:对信号进行“收集”并“总结”,类似水池收集水资源,因为得名池化层
  • 收集:一个多变少的过程,如下图所示,输入为 4 × 4 4\times4 4×4,输出为 2 × 2 2\times2 2×2
    在这里插入图片描述
  • 总结:总结有两种方式,一种是取最大值,一种是取平均值

在这里插入图片描述

(2)PyTorch实现
<1> nn.MaxPool2d()
nn.MaxPool2d(kernel_size, 
             stride=None,
             padding=0, 
             dilation=1,
             return_indices=False,
             ceil_mode=False)
  • 功能:对二维信号(图像)进行最大值池化
  • 参数:
  • kernel_size:池化核尺寸;
  • stride:步长;
  • padding:填充个数;
  • dilation:池化核间隔大小;
  • ceil_mode:池化过程中有一个除法操作,当不能整除时,如果参数设置为True,尺寸向上取整,默认参数值是False,向下取整;
  • return_indices:记录池化像素索引,记录最大值像素所在的位置索引,通常在最大值反池化中使用
  • 实例:
maxpool_layer = nn.MaxPool2d((2, 2), stride=(2, 2))   # input:(i, o, size) weights:(o, i , h, w)
img_pool = maxpool_layer(img_tensor)

在这里插入图片描述

上图右边为池化后的图片

<2> nn.AvgPool2d
nn.AvgPool2d(kernel_size, 
             stride=None,
             padding=0, 
             ceil_mode=False,
             count_include_pad=True,
             divisor_override=None)
  • 功能:对二维信号(图像)进行平均值池化
  • 参数:
  • kernel_size:池化核尺寸;
  • stride:步长;
  • padding:填充个数;
  • ceil_mode:尺寸向上取整;
  • count_include_pad:如果参数值为True,使用填充值用于计算;
  • divisor_override:求平均值的时候,可以不使用像素值的个数作为分母,而是使用除法因子;
  • 实例:
avgpoollayer = nn.AvgPool2d((2, 2), stride=(2, 2))   # input:(i, o, size) weights:(o, i , h, w)
img_pool = avgpoollayer(img_tensor)

在这里插入图片描述

<3> nn.MaxUnpool2d
nn.MaxUnpool2d(kernel_size, 
               stride=None, 
               padding=0)
forward(self, input, indices, output_size=None)
  • 功能:对二维信号(图像)进行最大值池化上采样,将小尺寸图片池化为大尺寸图片。如下图中的反池化过程将一个 2 × 2 2\times2 2×2的图片反池化为一个 4 × 4 4\times4 4×4的图片,这里涉及像素值应该放到哪一个位置的问题,放到哪一个位置由最大值池化中记录的最大值像素所在的位置,所在的索引。把最大值池化层中的最大值像素所在的位置传入到反池化层中,会根据从最大值池化中得到的索引将像素值放到对应的位置。所以最大值反池化层和池化层是类似的。唯一不同就是在forward()函数中要传入一个indices,也就是反池化需要的索引值

在这里插入图片描述

  • 参数
  • kernel_size:池化核尺寸
  • stride:步长
  • padding:填充个数
2、线性层(Linear Layer

线性层又称全连接层,其每个神经元与上一层所有神经元相连 实现对前一层的线性组合,线性变换

在这里插入图片描述

PyTorch实现:nn.Linear
  • 功能: 对一维信号(向量)进行线性组合
  • 参数:
  • in_features:输入结点数;
  • out_features:输出结点数;
  • bias:是否需要偏置
  • 计算公式:
    y = x W T + b i a s y=x W^{T}+bias y=xWT+bias
3、激活函数层(Activation Layer

激活函数对特征进行非线性变换,赋予多层神经网络具有深度的意义,这是因为如果只有线性层,则神经网络中的多层的线性层等于一层线性层,如下图所示:

在这里插入图片描述

黄色为输入层 X X X,蓝色为隐藏层 H 1 H_1 H1 H 2 H_2 H2,绿色为输出层 o u t out out,中间的三层变换为线性变换,记为 W 1 , W 2 , W 3 W_1,W_2,W_3 W1,W2,W3,则
O u t p u t = H 2 × W 3 = H 1 × W 2 × W 3 = X × ( W 1 × W 2 × W 3 ) = X × W \begin{aligned}Output =H_2 \times {W}_{3} =H_{1} \times {W}_{2} \times{W}_{3} ={X} \times({W}_{1} \times {W}_{2} \times {W}_{3} ) ={X} \times{W} \end{aligned} Output=H2×W3=H1×W2×W3=X×(W1×W2×W3)=X×W

(1)nn.sigmoid

在这里插入图片描述

  • 计算公式: y = 1 1 + e − x y=\frac{1}{1+e^{-x}} y=1+ex1
  • 梯度公式: y ′ = y × ( 1 − y ) {y}^{\prime}={y} \times(\mathbf{1}-{y}) y=y×(1y)
  • 特性:
  • 输出值在(0,1),符合概率;
  • 导数范围是[0,0.25],容易导致梯度消失;
  • 输出为非0均值,破坏数据分布;
(2)nn.tanh

在这里插入图片描述

  • 计算公式: y = sin ⁡ x cos ⁡ x = e x − e − x e − + e − x = 2 1 + e − 2 x + 1 y=\frac{\sin x}{\cos x}=\frac{e^{x}-e^{-x}}{e^{-}+e^{-x}}=\frac{2}{1+e^{-2 x}}+1 y=cosxsinx=e+exexex=1+e2x2+1
  • 梯度公式: y ′ = 1 − y 2 y^{\prime}=1-y^{2} y=1y2
  • 特性:
  • 输出值在(-1,1),数据符合0均值;
  • 导数范围是(0,1),易导致梯度消失;
(3)nn.ReLU

在这里插入图片描述

  • 计算公式: y = max ⁡ ( 0 , x ) y=\max (0, x) y=max(0,x)
  • 梯度公式:
    在这里插入图片描述
  • 特性:
  • 输出值均为正数,负半轴导致死神经元
  • 导数是1,缓解梯度消失,但易引发梯度爆炸
  • 改进:
  • nn.LeakyReLU:引入负半轴斜率
  • nn.PReLU:引入可学习斜率
  • nn.RReLU:引入均匀分布上下限

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值