关于Pytorch的F.unfold函数
最近使用到这个函数,但是一直不明白什么意思。在此做一个测试
大致上,可以理解为这个函数在做卷积的滑动窗口。但是只有卷的部分,没有积的部分。
可以看原文
https://pytorch.org/docs/stable/generated/torch.nn.Unfold.html#torch.nn.Unfold
具体输入是[batchsize, channel, h,w]
输出是[batchsize,channel* kH * kW, L] 其中kH是kernel的高,kW是kernel宽。 L则是这个高kH宽kW的kernel能在H*W区域按照指定stride滑动的次数。
我们做如下测试:
x = torch.arange(0, 1*1*5*5).float()
x = x.view(1,1,5,5)
print(x)
x1 = F.unfold(x, kernel_size=3, dilation=1, stride=1, padding=0)
print(x1.shape)
print(x1)
结果如下:
tensor([[[[ 0., 1., 2., 3., 4.],
[ 5., 6., 7., 8., 9.],
[10., 11., 12., 13., 14.],
[15., 16., 17., 18., 19.],
[20., 21., 22., 23., 24.]]]])
torch.Size([1, 9, 9])
tensor([[[ 0., 1., 2., 5., 6., 7., 10., 11., 12.],
[ 1., 2., 3., 6., 7., 8., 11., 12., 13.],
[ 2., 3., 4., 7., 8., 9., 12., 13., 14.],
[ 5., 6., 7., 10., 11., 12., 15., 16., 17.],
[ 6., 7., 8., 11., 12., 13., 16., 17., 18.],
[ 7., 8., 9., 12., 13., 14., 17., 18., 19.],
[10., 11., 12., 15., 16., 17., 20., 21., 22.],
[11., 12., 13., 16., 17., 18., 21., 22., 23.],
[12., 13., 14., 17., 18., 19., 22., 23., 24.]]])
从上述可以看到:
Reference:
https://blog.csdn.net/qq_34914551/article/details/102940368