x.unfold 函数详解

本文详细介绍了PyTorch中unfold函数的第二种用法,通过实例解释了如何在不同维度上进行数据展开操作,用于理解类似卷积的过程。通过size和step参数控制展开的大小和步长,形成多维展开后的张量。该函数在处理深度学习中的特征提取时非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实unfold函数有两种用法,本质一样都是把数据按照规则取出来,只不过用法不一样罢了,发现大部分博客只叙述了第一种用法,但是我遇到了第二种用法,所以耗费了一些时间把他弄懂了

用法1:x1 = f.unfold(x, kernel_size=3, dilation=1, stride=1)

用法2:x.unfold(维度, size=3,step=1)

这里只阐述用法2,对于用法1,可以看看这个博客。写的很好,同时他的讲解函数的方法很好,我也是用的他这个方法:

https://blog.csdn.net/qq_34914551/article/details/102940368icon-default.png?t=M276https://blog.csdn.net/qq_34914551/article/details/102940368

import torch
from torch.nn import functional as f
 
x = torch.arange(0, 1*200*5*3)
x = x.view(1,200,5,3)
print(x.shape)
x1 = x.unfold(2, size=3,step=1)
print(x1.shape)
x2 = x1.unfold(3, size=3,step=1)
print(x2.shape)

'''
torch.Size([1, 200, 5, 3])
torch.Size([1, 200, 3, 3, 3])
torch.Size([1, 200, 3, 1, 3, 3])
'''

具体例子看上述代码,然后把x x1 x2 打印下来就明白了。

我这里用语言叙述一下怎么回事:

首先x:1 200 5 3:

第一个参数是维度:我们选择了第三个维度(2),3*3的“卷积”(这里类似于卷积结构但实际上就是把那个部分原封不动的拿下来)。

如图他首先在第三个维度==5,进行滑动 3*3的矩阵只能滑动三次,所以这就是x1 【1 200 3 3 3】的原因。而对于x中第四个维度。直接取过来:但是注意,在这个所谓的卷积层滑动的时候,转置了一下(这个把例子看明白了就明白了)。【1 200 3 3  3】就是原本的第四个维度不改变。最后一个维度是卷积核的的大小。

以上便是我对于unfold的理解,如果有不对的地方欢迎大家批评指正!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值