我已经通过了official doc。我很难理解此功能的用途以及它的工作方式。有人可以用Layman的方式解释吗?
尽管我使用的Pytorch版本与文档相匹配,但它们提供的示例却出现错误。也许我已经解决了错误,应该教给我一些东西?文档中给出的代码段为:
fold = nn.Fold(output_size=(4, 5), kernel_size=(2, 2))
input = torch.randn(1, 3 * 2 * 2, 1)
output = fold(input)
output.size()
固定的代码段是:
fold = nn.Fold(output_size=(4, 5), kernel_size=(2, 2))
input = torch.randn(1, 3 * 2 * 2, 3 * 2 * 2)
output = fold(input)
output.size()
谢谢!
最佳答案
unfold
和fold
用于促进“滑动窗口”操作(如卷积)。
假设您要将功能foo
应用于要素地图/图像中的每个5x5窗口:
from torch.nn import functional as f
windows = f.unfold(x, kernel_size=5)
现在
windows
具有size
批处理-(5 * 5 * x.size(1)
)-num_windows,您可以在foo
上应用windows
:processed = foo(windows)
现在,您需要将
processed
折叠到x
的原始大小:out = f.fold(processed, x.shape[-2:], kernel_size=5)
您需要注意
padding
,并且kernel_size
可能会影响您将processed
“折回”到x
大小的能力。此外,
fold
对重叠元素求和,因此您可能希望将fold
的输出除以补丁大小。关于machine-learning - Pytorch的“折叠”和“展开”如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53972159/