动手学深度学习V2每日笔记(池化层)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1EV411j7nX/spm_id_from=333.999.0.0&vd_source=c7bfc6ce0ea0cbe43aa288ba2713e56d
文档教程 https://zh-v2.d2l.ai/

本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录,内容不会特别严谨仅供参考。

1.函数目录

1.1 torch

torch.nn位置
MaxPool2d2.2

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.]]]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值