當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。