PyTorch笔记8----------卷积神经网络
卷积神经网络主要包含:卷积层、激活层、BN层、池化层、FC层、损失层
具体内容后续应该会对机器学习和深度学习进行更新
1.卷积层
- 对图像和滤波矩阵做内积(逐个元素相乘再求和)的操作
- nn.Conv2d(in_channels,out_channels,kernel_size,stride,padding,dilation,groups,bias)
- in_channels:输入数据的通道数
- out_channels:卷积操作后输出的通道数,也就是卷积核的数量。每个卷积核会生成一个输出通道。
- kernel_size:卷积核大小
- stride:每次移动卷积核的步长大小
- padding:在输入数据的边缘添加零值填充的大小,用于控制输出特征图的尺寸
- dilation:控制卷积核中元素之间的间距,即空洞卷积的膨胀率
- groups:对当前卷积进行分组卷积
- bias:是否在卷积操作后添加偏置项。默认值为
True
,表示添加偏置;如果设置为False
,则不添加偏置。
- 感受野:指神经网络中神经元“看到的”输入区域,再卷积神经网络中,特征图上某个元素的计算受输入图像上某个区域的影响,这个区域即该元素的感受野
2.池化层
- 对输入的特征图进行压缩
- 使特征图变小,简化网络的计算复杂度
- 进行特征压缩,提取主要特征
- 常用的池化方法有:最大池化、平均池化
- nn.MaxPool2d(kernel_size,stride,padding,dilation,return_indices,ceil_mode)
- kernel_size:池化窗口的大小(高度和宽度)
- stride:池化窗口在特征图上滑动的步长
- padding:输入特征图边缘的填充像素数
- dilation:池化窗口的扩张系数(空洞池化)
- return_indices:是否返回最大值在输入特征图中的索引(坐标)。默认值为
False
。 - ceil_mode:控制输出特征图尺寸的计算方式。默认值为
False
(向下取整)。
3.上采样层
- nn.functional.interpolate(input,size,mode,alig_corners)
- input:输入张量
- size:指定输出尺寸或缩放比例
- mode:决定如何计算新像素的值,常见值:nearest,bilinear,bicubic,area,linear
- alig_corners:控制输入与输出边缘像素的坐标映射关系
- nn.ConvTranspose2d(in_channels,out_channels,kernel_size,stride,padding,out_padding,bias)
- in_channels:输入特征图的通道数
- out_channels:当前层输出的特征图通道数
- kernel_size:定义转置卷积的核尺寸
- stride:控制输出特征图的尺寸放大倍数
- padding:转置卷积的
padding
是在输入特征图的边缘填充 0,目的是控制输出尺寸的下限 - out_padding:转置卷积特有的参数,用于对输出的边缘进行额外填充(填充值为 0),以精确调整输出尺寸
- bias:在卷积操作后对每个通道添加一个可学习的偏置值
4.激活层
- 为了增加网络的非线性,进而提升网络的表达能力
- 常见的激活函数:ReLU、Leakly ReLU、ELU、Tanh
- torch.nn.ReLU()
5.BatchNorm层
- 通过一定的规范手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值0方差1的标准正态分布
- Batchnorm是一种归一化手段,它会减小图像之间的绝对差异,突出相对差异,加快训练速度
- nn.BatchNorm2d(num_features,eps,momentum,affine,track_running_stats)
- num_features:输入特征图的通道数
- eps:归一化时的小常数,用于防止分母为零
- momentum:控制运行时全局均值(
running_mean
)和全局方差(running_var
)的更新速度 - affine:
- 若
affine=True
(默认),层会学习两个可训练参数:gamma
(缩放因子):形状为(num_features,)
,用于调整归一化后的特征范围beta
(平移因子):形状为(num_features,)
,用于恢复特征的原始分布(避免归一化后信息丢失)
- 若
affine=False
:gamma
和beta
被固定为 1 和 0,仅执行纯归一化(无缩放和平移)。
- 若
- track_running_stats:若
track_running_stats=True
(默认),训练阶段会累积全局均值(running_mean
)和方差(running_var
),推理时使用这些全局统计量代替当前批次的统计量;若为False
,推理时直接使用当前批次的均值和方差(可能导致不稳定)。
6.全连接层
- 连接所有的特征,将输出值送入分类器
- 对前层的特征进行一个加权和,将特征空间通过线性变换映射到样本标记空间
- 可以通过1*1卷积加平均池化代替
- 可以通过全连接层参数冗余
- 全连接层参数和尺寸相关
- nn.Linear(in_features,out_features,bias)
- in_features:输入特征向量的维度
- out_features:输出特征向量的维度
- bias:是否添加可学习的偏置向量
7.Dropout层
- 在不同的训练过程中随机扔掉一部分神经元,以此来减少参数
- 测试过程中不使用随机失活,所有的神经元都激活
- 为了防止或者减轻过拟合而使用的函数,一般用在全连接层
- nn.dropout
8.损失层
- 设置一个损失函数用来比较网络的输出值和目标值,通过最小化损失来驱动网络的训练
- 网络的损失通过前向操作计算,网络参数相对于损失函数的梯度则通过反向操作计算
- 分类问题的损失
- nn.BCELoss
- nn.CrossEntropyLoss
- 回归问题的损失
- nn.L1Loss
- nn.MSELoss
- nn.SmoothL1Loss
8.学习率
- 决定目标函数能否收敛到局部最小值以及何时收敛到最小值
- torch.optim.lr_scheduler
9.优化器
- 引入随机性和噪声:GB、BGD、SGD、MBGD
- 加入动量原则,具有加速梯度下降作用:Momentum、NAG
- 自适应:AdaGrad、RMSProp、Adam、AdaDelta
- torch.optim.xxxxx
10.正则化
- L1正则:参数绝对值的和
- L2正则:参数的平方和(weight_decay)
知识点为听课总结笔记,课程为B站“2025最新整合!公认B站讲解最强【PyTorch】入门到进阶教程,从环境配置到算法原理再到代码实战逐一解读,比自学效果强得多!”:2025最新整合!公认B站讲解最强【PyTorch】入门到进阶教程,从环境配置到算法原理再到代码实战逐一解读,比自学效果强得多!_哔哩哔哩_bilibili