我已经阅读了 官方文档。我很难理解此功能的用途及其工作原理。有人可以用外行的话解释一下吗?
原文由 shoshi 发布,翻译遵循 CC BY-SA 4.0 许可协议
我已经阅读了 官方文档。我很难理解此功能的用途及其工作原理。有人可以用外行的话解释一下吗?
原文由 shoshi 发布,翻译遵循 CC BY-SA 4.0 许可协议
unfold
将张量想象成一个较长的张量,重复的列/行值“折叠”在彼此之上,然后“展开”:
size
确定折叠有多大step
决定折叠的频率例如,对于一个 2x5 张量,用 step=1
展开它,并修补 size=2
跨越 dim=1
:
x = torch.tensor([[1,2,3,4,5],
[6,7,8,9,10]])
>>> x.unfold(1,2,1)
tensor([[[ 1, 2], [ 2, 3], [ 3, 4], [ 4, 5]],
[[ 6, 7], [ 7, 8], [ 8, 9], [ 9, 10]]])
fold
与此操作大致相反,但“重叠”值在输出中相加。
原文由 iacob 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答873 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
unfold
和fold
用于促进“滑动窗口”操作(如卷积)。假设您要将函数foo
应用到特征图/图像中的每个5x5
窗口:Now
windows
hassize
of batch-(5 5x.size(1)
)-num_windows, you can applyfoo
onwindows
:现在你需要“折叠”
processed
回到原来的大小x
:You need to take care of
padding
, andkernel_size
that may affect your ability to “fold” backprocessed
to the size ofx
.此外,fold
对重叠元素 _求和_,因此您可能希望将fold
的输出除以补丁大小。请注意
torch.unfold
执行的操作与nn.Unfold
不同。有关详细信息,请参阅 此线程。