当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PyTorch Fold用法及代码示例


本文简要介绍python语言中 torch.nn.Fold 的用法。

用法:

class torch.nn.Fold(output_size, kernel_size, dilation=1, padding=0, stride=1)

参数

  • output_size(int或者tuple) -输出的空间维度的形状(即 output.sizes()[2:] )

  • kernel_size(int或者tuple) -滑块的大小

  • stride(int或者tuple) -输入空间维度中滑动块的步幅。默认值:1

  • padding(int或者tuple,可选的) -要在输入的两侧添加隐式零填充。默认值:0

  • dilation(int或者tuple,可选的) -控制邻域内元素步幅的参数。默认值:1

将一组滑动的局部块组合成一个大的包含张量。

考虑一个批处理的 input 张量,其中包含滑动的局部块,例如图像块,形状为 ,其中 是批处理维度, 是块内的值的数量(块具有 每个空间位置都包含一个 通道向量),而 是块的总数。 (这与 Unfold 的输出形状完全相同。)此操作通过对重叠值求和,将这些局部块组合成形状为 的大 output 张量。与 Unfold 类似,参数必须满足

其中 在所有空间维度上。

  • output_size 说明了滑动局部块的大包含张量的空间形状。当多个输入形状映射到相同数量的滑动块时,解决歧义很有用,例如,使用 stride > 0

paddingstridedilation 参数指定如何检索滑动块。

  • stride 控制滑块的步幅。

  • padding 控制重塑前每个维度的padding 点的两侧隐含zero-paddings 的数量。

  • dilation控制内核点之间的间距;也称为 à trous 算法。很难说明,但是这个link 很好地可视化了dilation 的作用。

  • 如果 output_sizekernel_sizedilationpaddingstride 是 int 或长度为 1 的元组,则它们的值将在所有空间维度上复制。

  • 对于两个输出空间维度的情况,此操作有时称为 col2im

注意

Fold 通过对所有包含块中的所有值求和来计算生成的大张量中的每个组合值。 Unfold 通过从大张量复制来提取局部块中的值。因此,如果块重叠,它们就不是彼此相反的。

一般来说,折叠和展开操作的关系如下。考虑使用相同参数创建的 Fold Unfold 实例:

>>> fold_params = dict(kernel_size=..., dilation=..., padding=..., stride=...)
>>> fold = nn.Fold(output_size=..., **fold_params)
>>> unfold = nn.Unfold(**fold_params)

然后对于任何(支持的)input 张量,以下等式成立:

fold(unfold(input)) == divisor * input

其中 divisor 是仅取决于 input 的形状和 dtype 的张量:

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

divisor 张量不包含零元素时,foldunfold 运算是彼此的逆运算(直到常数除数)。

警告

目前,仅支持 4-D 输出张量(批量 image-like 张量)。

形状:
  • 输入:

  • 输出:(N, C, \text{output\_size}[0], \text{output\_size}[1], \dots) 如上所述

例子:

>>> fold = nn.Fold(output_size=(4, 5), kernel_size=(2, 2))
>>> input = torch.randn(1, 3 * 2 * 2, 12)
>>> output = fold(input)
>>> output.size()
torch.Size([1, 3, 4, 5])

相关用法


注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.nn.Fold。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。