【Python】nn.nn.CircularPad1、2、3d函数和nn.ConstantPad1、2、3d函数详解和示例

前言

在深度学习中,尤其是在处理图像、音频或其他多维数据时,数据填充(Padding)是一个常见的操作。填充不仅可以保持数据的空间维度,还能在卷积操作中避免信息丢失。PyTorch提供了多种填充方式,其中nn.CircularPadXd和nn.ConstantPadXd是两种常用的填充方法。本文将详细介绍nn.CircularPad1d、nn.CircularPad2d、nn.CircularPad3d以及nn.ConstantPad1d、nn.ConstantPad2d、nn.ConstantPad3d的函数原型、用法示例,并总结它们的特点。

函数原型

nn.CircularPadXd

nn.CircularPadXd(其中X可以是1、2或3)类用于使用循环填充(circular padding)方式填充输入张量(tensor)的边界。循环填充意味着在填充时使用输入张量边界的值来填充另一端。

nn.CircularPad1d(padding): 一维数据的循环填充。
nn.CircularPad2d(padding): 二维数据的循环填充,常用于图像。
nn.CircularPad3d(padding): 三维数据的循环填充,适用于视频帧或体积数据。
padding参数可以是一个整数或元组(tuple),表示在每个维度上的填充大小。

nn.ConstantPadXd

nn.ConstantPadXd(其中X可以是1、2或3)类用于使用常数填充(constant padding)方式填充输入张量的边界。

nn.ConstantPad1d(padding, value): 一维数据的常数填充。
nn.ConstantPad2d(padding, value): 二维数据的常数填充,常用于图像。
nn.ConstantPad3d(padding, value): 三维数据的常数填充,适用于视频帧或体积数据。
padding参数同上,value参数指定了填充的常数值。

示例

nn.CircularPad1、2、3d 示例

import torch
import torch.nn as nn

# 示例:nn.CircularPad2d
input = torch.arange(9, dtype=torch.float).reshape(1
<think>我们正在查找`torch.nn.AvgPool2d`的函数原型(function signature)。根据PyTorch官方文档,`torch.nn.AvgPool2d`是一个类,其构造函数(__init__方法)的参数定义了它的行为。因此,我们需要提供其构造函数的参数列表。 根据PyTorch文档[^1],`torch.nn.AvgPool2d`的构造函数签名如下: ```python torch.nn.AvgPool2d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None) ``` 参数说明: 1. **kernel_size** (int or tuple[int, int]): 池化窗口的大小。可以是单个整数(表示正方形窗口)或两个整数的元组(分别表示高度宽度)。 2. **stride** (int or tuple[int, int], optional): 池化操作的步长。默认值为`kernel_size`。可以是单个整数或两个整数的元组。 3. **padding** (int or tuple[int, int], optional): 输入张量的每一侧添加的隐式零填充(padding)。默认值为0。可以是单个整数或两个整数的元组。 4. **ceil_mode** (bool, optional): 当为True时,将使用ceil函数(向上取整)而不是floor函数(向下取整)计算输出形状。默认值为False。 5. **count_include_pad** (bool, optional): 当为True时,将把零填充(padding)包括在平均计算中。默认值为True。 6. **divisor_override** (int, optional): 如果指定,将使用这个除数(divisor)代替窗口内元素的数量(即覆盖默认的`kernel_size[0]*kernel_size[1]`)。默认值为None。 注意:在调用时,我们通常实例化这个类,然后将输入张量传递给实例(即调用`forward`方法)。例如: ```python pool = nn.AvgPool2d(kernel_size=3, stride=2, padding=1) output = pool(input) ``` 因此,函数原型(即类的构造函数)就是上述参数列表。 另外,根据引用[3]中关于`nn.Module`的说明,`AvgPool2d`作为`nn.Module`的子类,其前向传播由`forward`方法实现,但用户通常不需要直接调用`forward`,而是调用实例本身。 [^1]: [PyTorch AvgPool2d Documentation](https://pytorch.org/docs/stable/generated/torch.nn.AvgPool2d.html) 现在,我们根据用户要求,生成相关问题。 §§相关问题§§ 1. `torch.nn.AvgPool2d` 中的 `divisor_override` 参数有什么具体应用场景? 2. 当设置 `ceil_mode=True` 时,输出形状的计算公式会发生什么变化? 3. 在哪些情况下应该将 `count_include_pad` 设置为 False? 4. 如何手动计算 `AvgPool2d` 的输出尺寸?</think>### `torch.nn.AvgPool2d` 函数原型定义 在 PyTorch 中,`torch.nn.AvgPool2d` 是一个类而非函数,其构造函数签名如下: ```python torch.nn.AvgPool2d( kernel_size: _size_2_t, stride: Optional[_size_2_t] = None, padding: _size_2_t = 0, ceil_mode: bool = False, count_include_pad: bool = True, divisor_override: Optional[int] = None ) ``` #### 参数详解: 1. **`kernel_size`** (必需参数) - 类型:`int` 或 `(int, int)` 元组 - 作用:定义池化窗口尺寸 - 示例:`3` 表示 $3×3$ 窗口,`(2, 4)` 表示 $2×4$ 窗口 2. **`stride`** (可选参数) - 类型:`int` 或 `(int, int)` 元组 - 默认值:等于 `kernel_size` - 作用:控制窗口滑动步长 - 示例:`stride=2` 表示水平垂直方向步长均为 2 3. **`padding`** (可选参数) - 类型:`int` 或 `(int, int)` 元组 - 默认值:`0` - 作用:输入张量边缘填充零的数量 - 示例:`padding=1` 表示四边各填充 1 行/列零值 4. **`ceil_mode`** (可选参数) - 类型:`bool` - 默认值:`False` - 作用:控制输出尺寸计算方式: - `False`:向下取整(默认)$ \left\lfloor \cdot \right\rfloor $ - `True`:向上取整 $ \left\lceil \cdot \right\rceil $ 5. **`count_include_pad`** (可选参数) - 类型:`bool` - 默认值:`True` - 作用:是否将填充值计入平均值计算 - `True`:包含填充零值 - `False`:仅计算原始数据区域 6. **`divisor_override`** (可选参数) - 类型:`int` 或 `None` - 默认值:`None` - 作用:覆盖默认除数(窗口元素数) - 示例:设 `divisor_override=4` 时,窗口总将除以 4 而非实际元素数 #### 数学公式: 输出尺寸计算(当 `ceil_mode=False` 时): $$ H_{\text{out}} = \left\lfloor \frac{H_{\text{in}} + 2 \times \text{padding}[0] - \text{kernel\_size}[0]}{\text{stride}[0]} + 1 \right\rfloor $$ $$ W_{\text{out}} = \left\lfloor \frac{W_{\text{in}} + 2 \times \text{padding}[1] - \text{kernel\_size}[1]}{\text{stride}[1]} + 1 \right\rfloor $$ #### 实现原理: 作为 `nn.Module` 子类,`AvgPool2d` 通过 `forward()` 方法实现前向传播[^3]: ```python class AvgPool2d(_AvgPoolNd): def forward(self, input: Tensor) -> Tensor: return F.avg_pool2d( input, self.kernel_size, self.stride, self.padding, self.ceil_mode, self.count_include_pad, self.divisor_override ) ``` 实际计算委托给底层函数 `torch.nn.functional.avg_pool2d()`[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木彳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值