Pytorch nn.Unfold 理解

文章用来记自己对一些初次遇见的函数的理解,可能有所错误,如果路过的各位能批评指正感激不尽。
unfold的基本操作与卷积类似,区别在于unfold是将内部核每次扫过的区域提取出来而不是进行卷积运算。
如下面的代码

import  torch
import torch.nn as nn

a = torch.rand(1,2,2,3)
print(a)
unfold = nn.Unfold(kernel_size=(2,2), padding = 0, stride= 1, dilation=1)
b = unfold(a)
print(b)
print(b.shape)
print(b.permute(0,2,1))

输出的结果如下

tensor([[[[0.7707, 0.4548, 0.6241],
          [0.2297, 0.3549, 0.5207]],

         [[0.8333, 0.0889, 0.6373],
          [0.2227, 0.5256, 0.2432]]]])
tensor([[[0.7707, 0.4548],
         [0.4548, 0.6241],
         [0.2297, 0.3549],
         [0.3549, 0.5207],
         [0.8333, 0.0889],
         [0.0889, 0.6373],
         [0.2227, 0.5256],
         [0.5256, 0.2432]]])
torch.Size([1, 8, 2])
tensor([[[0.7707, 0.4548, 0.2297, 0.3549, 0.8333, 0.0889, 0.2227, 0.5256],
         [0.4548, 0.6241, 0.3549, 0.5207, 0.0889, 0.6373, 0.5256, 0.2432]]])

变换维度前理解可能稍微有点麻烦,变换后就可以很清楚的看出是怎么进行unfold的,2x2的核先扫过第一块区域得到0.7707~0.5256这一块向量(长度为8实际上是原来两个长度为4的向量按channel维度的顺序拼接在了一起)。这也是为什么输出是
[batch_size,channel * kernel_size0 * kernel_size1, L]
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
torch.nn.UnfoldPyTorch的一个函数,用于在图像处理将输入的多通道图像转换为多个滑动窗口大小的图像块。它可以将输入图像按照指定的kernel_size和stride进行切分,并返回一个张量,其每个元素都是一个图像块。 具体地,我们可以通过以下步骤来使用nn.Unfold函数进行图像处理: 1. 首先,导入相关的库和模块,例如torch.nn和torch。 2. 创建一个输入张量,表示模拟的图片数据。这个张量的形状通常是(batch_size, channels, height, width),其batch_size表示批次大小,channels表示通道数,height表示图像高度,width表示图像宽度。这个张量可以使用torch.rand来生成随机数,以便用于演示。 3. 创建一个nn.Unfold的实例,并传入kernel_size和stride参数。kernel_size表示滑动窗口的大小,stride表示滑动窗口的步长。这些参数的值可以根据具体的需求进行设置。 4. 调用unfold方法,将输入张量作为参数传入,得到一个新的张量。这个新的张量的形状将根据kernel_size、stride和输入张量的形状进行计算,具体可以通过shape属性查看。 5. 可选地,可以打印输出张量的形状和内容,以便进一步理解unfold的结果。 总结起来,torch.nn.Unfold函数是将输入的多通道图像切分为多个滑动窗口大小的图像块的函数。它可以帮助我们在图像处理进行特征提取和数据处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [torch.nn文档学习总结](https://blog.csdn.net/qq_33952811/article/details/108430097)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Pytorchnn.Unfold()和Unfold()详解](https://blog.csdn.net/qq_45100200/article/details/127251566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值