我已经通过了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()


谢谢!

最佳答案

unfoldfold用于促进“滑动窗口”操作(如卷积)。
假设您要将功能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/

10-10 10:29