本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录,内容不会特别严谨仅供参考。
1.函数目录
1.1 torch
2. 池化层
2.1 二维最大池化
- 返回滑动窗口中的最大值
import torch
from torch import nn
def pool2d(X, pool_size, mode='max'):
p_w, p_h = pool_size
Y = torch.zeros((X.shape[0]-p_w+1, X.shape[1]-p_h+1))
for i in range(Y.shape[0]):
for j in range(Y.shape[1]):
if mode=='max':
Y[i,j]=X[i:i+p_w, j:j+p_h].max()
elif mode=='avg':
Y[i,j]=X[i:i+p_w, j:j+p_h].mean()
return Y
X = torch.arange(9.0).reshape(3,3)
pool2d(X,(2,2))
tensor([[4., 5.],
[7., 8.]])
pool2d(X,(2,2), 'avg')
tensor([[2., 3.],
[5., 6.]])
2.2 填充和步幅
- 池化层与卷积层类似,都具有填充和步幅
- 没有可以学习的参数
- 在每个输入通道应用池化层以获得相应的输出通道
- 输入通道数=输出通道数
X = torch.arange(16.0).reshape(1,1,4,4)
ploo2d = nn.MaxPool2d(3)
ploo2d(X)
# torch中步幅默认等于kernel的大小,因此只有一个输出
tensor([[[[10.]]]]
ploo2d = nn.MaxPool2d(3, padding=1, stride=2)
ploo2d(X)
tensor([[[[ 5., 7.],
[13., 15.]]]])
2.2.1 nn.MaxPool2d
nn.MaxPool2d 是 PyTorch 中的一个类,用于实现二维最大池化操作(Max Pooling)。最大池化是一种下采样操作,用于减少输入特征图的尺寸,同时保留最显著的特征。最大池化操作在卷积神经网络中广泛使用,以减小计算量和防止过拟合。
- 作用
- 降维:通过对输入特征图进行下采样,减少数据的维度。
- 提取重要特征:在每个池化窗口内取最大值,保留最显著的特征。
- 防止过拟合:减少模型的参数数量,从而降低过拟合的风险。
torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
常用参数
- kernel_size:池化窗口的大小,可以是单个整数或元组 (height, width)。
- stride:池化窗口的步幅,默认为 kernel_size,可以是单个整数或元组 (stride_height, stride_width)。
- padding:在输入特征图的边界处进行填充,默认为 0,可以是单个整数或元组 (pad_height, pad_width)。
- dilation:控制池化窗口内元素之间的间隔,默认为 1。
2.3 平均池化层
最大池化层:每个窗口中最强的模式信号
平均池化层:将最大池化层中的“最大”操作替换为“平均’
- 池化层返回窗口中最大或平均值
- 缓解卷积层会位置的敏感性
- 同样有窗口大小、填充、和步幅作为超参数
2.4 多个通道
X = torch.cat((X, X+1),1)
X
tensor([[[[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[12., 13., 14., 15.]],
[[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.],
[13., 14., 15., 16.]]]])
ploo2d = nn.MaxPool2d(3, padding=1, stride=2)
ploo2d(X)
tensor([[[[ 5., 7.],
[13., 15.]],
[[ 6., 8.],
[14., 16.]]]])