【pytorch】Unfold和Fold的互逆操作

1. 参数定义

Unfold
https://pytorch.org/docs/stable/generated/torch.nn.Unfold.html#torch.nn.Unfold
【pytorch】Unfold和Fold的互逆操作_第1张图片

Fold
https://pytorch.org/docs/stable/generated/torch.nn.Fold.html#torch.nn.Fold
【pytorch】Unfold和Fold的互逆操作_第2张图片
注意:参数当中的padding是在四周边补零,而当fold后的尺寸比output给定的尺寸小时,将在结果的右边或者下边补零!

2. 逆运算

注意:互为逆运算要求fold 和 unfold的参数要保持一致!

  1. 没有重叠区域的情况,unfold和fold互为逆运算,fold(unfold(x)) = = x
  2. 有重叠区域的情况,unfold和fold不是互为逆运算,如果要将unfold的张量还原,需要除以一个叠加次数的因子divisor
fold(unfold(input)) / divisor == input

divisor是全1同形矩阵经过同样的fold(unfold(*))变化得到。

input_ones = torch.ones(input.shape, dtype=input.dtype)
divisor = fold(unfold(input_ones))

【pytorch】Unfold和Fold的互逆操作_第3张图片

你可能感兴趣的:(pytorch,人工智能,python)