一、1d/2d/3d卷积
- 卷积运算:卷积核在输入信号(图像)上滑动,相应位置上进行乘加
- 卷积核:又称为滤波器,过滤器,可认为是某种模式,某种特征。
卷积过程类似于用一个模板去图像上寻找与他相似的区域,与卷积核模式越相似,激活值越高,从而实现特征提取
AlexNet卷积核可视化,发现卷积核学习到的是边缘,条纹,色彩这一些细节模式
- 卷积维度:一般情况下,卷积核在几个维度上滑动,就是几维卷积
二、卷积-nn.Conv2d
- nn.Conv2d 功能:对多个二维信号进行二维卷积
- 主要参数:
- in_channels:输入通道数
- out_channels:输出通道数,等价于卷积核个数
- kernel_size:卷积核尺寸
- stride:步长
- padding:填充个数
- dilation:空调卷积大小
- groups:分组卷积设置
- bias:偏置
- 尺寸计算:
- 简化版:
- 完整版:
三、转置卷积-nn.ConvTranspose
转置卷积又称反卷积和部分跨越卷积,用于对图像进行上采样。
- 为什么成为转置卷积?
- 正常卷积:假设图像尺寸为4*4,卷积核为3*3,padding=0,stride=1
图像:I16*1,卷积核:K16*4,输出:O16*1 = K16*4 * I4*1
-
- 转置卷积:假设图像尺寸为2*2,卷积核为3*3,padding=0,stride=1
图像:I4*1 卷积核:K16*4 输出:O16*1 = K16*4 * I4*1
- 功能:转置卷积实现上采样
- 主要参数:
- in_channels:输入通道数
- out_channels:输出通道数,等价于卷积核个数
- kernel_size:卷积核尺寸
- stride:步长
- padding:填充个数
- dilation:空调卷积大小
- groups:分组卷积设置
- bias:偏置
- 尺寸计算:
- 简化版:
- 完整版:
棋盘效应:推荐文章《Deconvolution and Checkerboard Artifacts》
四、池化层-----Pooling Layer
- 池化运算:对信号进行“收集”并“总结”,类似水池收集水资源,因而得名池化层
- “收集”:多变少 “总结”:最大值/平均值
- 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:填充个数
五、线性层-----Linear Layer
线性层又称全连接层,其每个神经元与上一层所有神经元相连实现对前一层的线性组合,线性变换
input = [1, 2, 3] shape = (1,3)
1 2 3 4
w_0 = 1 2 3 4 shape = (3,4)
1 2 3 4
Hidden = input * w_0 shape = (1,4)
= [6, 12, 18, 24]
- nn.Linear
- 功能:对一维信号(向量)进行线性组合
- 主要参数:
- in_features:输入结点数
- out_features:输出结点数
- bias:是否需要偏置
- 计算公式:
六、激活函数层-----Activation Layer
激活函数对特征进行非线性变换,赋予多层神经网络具有深度的意义
H1 = X * W1
H2 = H1 * W2
Output = H2 * W3
= H1 * W2 * W3
= X * (W1 * W2 * W3)
= X * W
- nn.Sigmoid
- 计算公式:
- 梯度公式:
- 特性:
- 输出值在(0,1),符合概率
- 导数范围是[0, 0.25],易导致梯度消失
- 输出非零均值,破坏数据分布
- nn.tanh
- 计算公式:
- 梯度公式:
- 特性:
- 输出值在(-1,1),数据符合0均值
- 导数范围是(0,1),易导致梯度消失
- nn.ReLU
- 计算公式:
- 梯度公式:
- 特性:
- 输出值均为正数,负半轴导致死神经元
- 导数是1,缓解梯度消失,但易引发梯度爆炸
- nn.LeakyReLU
- negative_slope:负半轴斜率
- nn.PReLU
- init:可学习斜率
- nn.RReLU
- lower:均匀分布下限
- upper:均匀分布上限