unfold就是只是输出窗口移动的内容,并不积。相当于把原图进行切分,沿着不同的维度。
et = x.unfold(dim, size, step)
dim:int,表示需要展开的维度(可以理解为窗口的方向)
size:int,表示滑动窗口大小
step:int,表示滑动窗口的步长
import torch
x = torch.Tensor([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[ 11, 12, 13, 14, 15],
[ 16, 17, 18, 19, 20],
[ 21, 22, 23, 24, 25]])
x = x.unfold(0, 3, 1)
print(x)
print(x.size())
x = torch.Tensor([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[ 11, 12, 13, 14, 15],
[ 16, 17, 18, 19, 20],
[ 21, 22, 23, 24, 25]])
x = x.unfold(1, 3, 1)
print(x)
print(x.size())
result:
tensor([[[ 1., 6., 11.],
[ 2., 7., 12.],
[ 3., 8., 13.],
[ 4., 9., 14.],
[ 5., 10., 15.]],
[[ 6., 11., 16.],
[ 7., 12., 17.],
[ 8., 13., 18.],
[ 9., 14., 19.],
[10., 15., 20.]],
[[11., 16., 21.],
[12., 17., 22.],
[13., 18., 23.],
[14., 19., 24.],
[15., 20., 25.]]])
torch.Size([3, 5, 3])
tensor([[[ 1., 2., 3.],
[ 2., 3., 4.],
[ 3., 4., 5.]],
[[ 6., 7., 8.],
[ 7., 8., 9.],
[ 8., 9., 10.]],
[[11., 12., 13.],
[12., 13., 14.],
[13., 14., 15.]],
[[16., 17., 18.],
[17., 18., 19.],
[18., 19., 20.]],
[[21., 22., 23.],
[22., 23., 24.],
[23., 24., 25.]]])
torch.Size([5, 3, 3])