nn模块
卷积层
1d/2d/3d/convolution
卷积运算:卷积核在输入信号(图像)上滑动,相应位置上进行乘加
卷积核:又称为滤波器,过滤器,可认为是某种模式,某种特征
卷积过程类似于用一个模板去图像上寻找与它相似的区域,与卷积核模型越相近,激活值越高,从而实现特征提取
卷积维度:一般情况下,卷积核在几个维度上滑动,就是几维卷积
nn.Conv2d
功能:对多个二维信号进行二维卷积
主要参数:
in_chanels
:输入通道数out_channels
:输出通道数,等价于卷积核个数kernel_size
:卷积核尺寸stride
:步长padding
:填充个数,通常是保持输入输出的特征分辨率保持不变dilation
:空洞卷积大小,常用于图像分割任务,提高感受野groups
:分组卷积设置bias
:偏置
卷积过程中权值一般一个4维的形状,但是最后为什么做的是2
维卷积?
一般查看权值的形状的时候,通常都是shape(c1, c2, c3, c4)
c1
输出的维度,有多少卷积核输出就是多少c2
输入的维度c3、c4
卷积核的大小
输入的图像通常是RGB
形式,因为会创建3
个卷积核,分别在不同的维度上面进行卷积,然后卷积的值相加,最后加上偏置,得到特征图
转置卷积
用于对图像进行上采样
假设图像尺寸为4*4
,卷积核为3*3
,paddin=0
,stride=1
-
正常卷积
首先将图片拉成一个16*1
的向量,这个1
代表的是一张图片,然后3*3
的卷积自动补零变成16
,因为输入是4*4
,所以卷积核是4*16
,相乘得一个4*1
,再reshape
变成2*2
-
转置卷积
和上面一样,先拉成一个16*1
的向量,卷积核因为输出是一个4*4
,但是输入是一个2*2
特征图,因为卷积核的大小是16*4
,最后输出的就是一个16*1
,然后在reshape
变成4*4
pytorch
也自带转置卷积的函数
nn.ConvTranspose2d
功能:转置卷积实现上采样
主要参数:
in_channel
:输入通道数out_channel
:输出通道数kernel_size
:卷积核尺寸stride
:步长padding
:填充个数dilation
:空洞卷积大小groups
:分组卷积设置bias
:偏置
但是转置卷积会出现棋盘效应,是因为不均匀卷积导致的,且转置卷积是不可逆的
池化层
池化运算:对信号进行“收集”并“总结”,类似水池收集水资源,因而得名池化层
“收集”:多变少 “总结”:最大值/平均值
nn.MaxPool2d
功能:对二维信息(图像)进行最大值池化
主要参数:
kernel_size
:池化核尺寸stride
:步长padding
:填充个数dilation
:池化核间隔大小ceil_mode
:尺寸向上取整return_indices
:记录池化像素索引
nn.AvgPool2d
功能:对二维信息(图像)进行平均值池化
主要参数:
kernel_size
:池化核尺寸stride
:步长padding
:填充个数ceil_mode
:尺寸向上取整count_include_pad
:填充值用于计算divisor_override
:除法因子
nn.MaxUnpool2d
功能:对二维信号(图像)进行最大值池化上采样
主要参数:
kernel_size
:池化核尺寸stride
:步长padding
:填充个数
线性层
线性层又称全连接层,其每个神经元与上一层所有的神经元相连接,实现对前一层的线性组合,线性变换
nn.Linear
功能:对一维信号(向量)进行线性组合
主要参数:
in_features
:输入结点数out_features
:输出结点数bias
:是否需要偏置
激活函数层
激活函数对特征进行非线性变换,赋予多层神经网络具有深度的意义
nn.Sigmoid
特性:
- 输出值在
(0,1)
,符合概率分布 - 导数范围是
[0, 0.25]
,易导致梯度消失 - 输出为非
0
均值,破坏数据分布
nn.tanh
特性:
- 输出值在
(-1,1)
,数据符合0
均值 - 导数范围
(0,1)
,易导致梯度消失
nn.ReLU
特性:
- 输出值均为正数,负半轴导致神经元坏死
- 导数是
1
,缓解梯度消失,但容易引发梯度爆炸