一、池化层

池化运算:对信号进行‘收集‘并‘总结’, 类似于水池收集水资源
收集:多变少,总结:最大值/平均值

图像下采样

1、nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

功能:对二维信号(图像)进行最大值池化
参数:
kernel_size:池化核尺寸
stride:步长
padding:补边
dilation:池化核间隔大小
ceil_mode:尺寸向上取整
return_indices:记录池化像素索引,在进行池化上采样时使用已经记录的像素索引位置进行扩展

2、nn.AvgPool2d(kernel_size, stride=None, padding=0, count_include_pad=True, divisor_override=None, ceil_mode=False)

功能:对二维信号进行平均值池化
参数:
kernel_size:池化核尺寸
stride:步长
padding:补边
ceil_mode:尺寸向上取整
count_include_pad:是否将填充值用于计算
divisor_override:除法因子

图像上采样(反池化)

nn.MaxUnpool2d(kernel_size, stride=None, padding=0)

功能:对图像进行最大值池化上采样
主要参数:
kernel_size:池化核尺寸
stride:步长
padding:补边
注意:它和下采样池化唯一的区别就是需要在forward函数中添加像素索引,forward(self, input, indices, output_size=None)

二、线性层

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

nn.Linear(in_features, out_features, bias=True)

功能:对一维信号进行线性组合
主要参数:
in_features:输入节点数
out_features:输出节点数
bias:是否需要偏置
计算公式:pytorch平均池化源码 pytorch 池化_pytorch平均池化源码(x为输入,W为权值,T为转置,bias为偏置)

三、激活函数层

激活函数对特征进行非线性变换,赋予多层神经网络具有深度的意义

1、nn.Sgmoid

计算公式:pytorch平均池化源码 pytorch 池化_池化_02

梯度公式:pytorch平均池化源码 pytorch 池化_pytorch_03

特性:输出值在(0,1),符合概率;导数范围是[0,0.25],易导致梯度消失;输出为非0均值,破坏数据分布

下图为sigmoid函数的曲线图,蓝色表示输出,红色表示梯度

sigmoid梯度消失:由于梯度在[0,0.25]之间,叠加相乘时会越来越小导致梯度消失

pytorch平均池化源码 pytorch 池化_pytorch平均池化源码_04

2、nn.tanh

计算公式:pytorch平均池化源码 pytorch 池化_pytorch_05

梯度公式:pytorch平均池化源码 pytorch 池化_pytorch平均池化源码_06

特性:输出值在(-1,1),数据符合0均值;导数范围是(0,1),易导致梯度消失

下面是tanh的曲线图,蓝色表示输出,红色表示梯度,相比于sigmoid函数梯度消失不是很明显,但是对于深度较大的网络结构还是会发生梯度消失

pytorch平均池化源码 pytorch 池化_ide_07

3、nn.ReLu

计算公式:pytorch平均池化源码 pytorch 池化_深度学习_08

pytorch平均池化源码 pytorch 池化_pytorch_09


特性:输出值均为正数,负半轴导致神经元致死;导数是1,缓解梯度消失,但是易引发梯度爆炸

下面是relu的曲线图,相比于前面两个,不会发生梯度消失,但是在叠加相乘时会越来越大,会发生梯度爆炸

pytorch平均池化源码 pytorch 池化_池化_10


对于上面的问题,对relu函数进行改进

改进relu
1、nn.LeakyReLu

参数:negative_slope:负半轴斜率
在负半轴增加一个斜率,使负半轴输出不再是0

2、nn.PReLu

参数:init:可学习斜率

3、nn.RReLu

参数:lower:均匀分布下限;upper:均匀分布上限

对负半轴随机采用一个斜率

pytorch平均池化源码 pytorch 池化_pytorch平均池化源码_11