torch.nn.functional.unfold与torch.nn.functional.fold函数

函数功能

torch.nn.functional.unfold是PyTorch中的一个函数,用于将输入张量展开为一个二维张量。
展开的方式是将输入张量的每个滑动窗口视为一个列向量,并将这些列向量按顺序排列成一个二维张量。
torch.nn.functional.fold常与torch.nn.functional.unfold搭配使用,是unfold的逆过程,参数基本一致。

参数含义

torch.nn.functional.unfold(input, kernel_size, dilation=1, padding=0, stride=1)
torch.nn.functional.fold(input, output_size, kernel_size, dilation=1, padding=0, tride=1)

input表示输入张量,即unfold函数操作的对象,注意必须是4D的张量
kernel_size表示滑动窗口的大小;
dilation表示邻域内元素的膨胀步幅,默认为1;
padding表示在输入的两侧进行填充的长度,通常情况下是采用全0填补;
stride表示滑动窗口的步长。
output_size表示输出张量的尺寸(H,W)而非输出张量的shape→(B, C, H, W)

示例

为了便于理解和记忆该函数,这里使用unfold及fold函数手动实现平均池化,代码如下:

#平均池化
def mean_pool(input, ph = 2, pw = 2, padding = 0, stride = 2):
    (b, c, h, w) = input.shape
    
    nh = 1 + int((h + 2 * padding - ph) / stride) 
    nw = 1 + int((w + 2 * padding - pw) / stride)
    
    input_unfold = torch.nn.functional.unfold(input, (ph, pw), padding = padding, stride = stride)
    input_unfold = input_unfold.transpose(1, 2).view(b, nh*nw, c, -1)
    out_mean_pool = torch.mean(input_unfold, dim=3, keepdim=False).transpose(1,2)
    output = torch.nn.functional.fold(out_mean_pool, (nh, nw), (1, 1))
    
    assert (output.size() == (b, c, nh, nw))
    return output
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Samuel Young

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

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

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

打赏作者

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

抵扣说明:

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

余额充值