1. 参数定义
Unfold
https://pytorch.org/docs/stable/generated/torch.nn.Unfold.html#torch.nn.Unfold
Fold
https://pytorch.org/docs/stable/generated/torch.nn.Fold.html#torch.nn.Fold
注意:参数当中的padding是在四周边补零,而当fold后的尺寸比output给定的尺寸小时,将在结果的右边或者下边补零!
2. 逆运算
注意:互为逆运算要求fold 和 unfold的参数要保持一致!
- 没有重叠区域的情况,unfold和fold互为逆运算,
fold(unfold(x)) = = x
- 有重叠区域的情况,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))