快捷方式

Fold

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

將一組滑動的區域性塊組合成一個大的包含張量。

考慮一個包含滑動區域性塊(例如影像塊)的批次 input 張量,其形狀為 (N,C×(kernel_size),L)(N, C \times \prod(\text{kernel\_size}), L),其中 NN 是批次維度,C×(kernel_size)C \times \prod(\text{kernel\_size}) 是塊內的值數量(一個塊有 (kernel_size)\prod(\text{kernel\_size}) 個空間位置,每個位置包含一個 CC 通道向量),LL 是塊的總數量。(這與 Unfold 的輸出形狀完全相同。)此操作透過對重疊的值求和,將這些區域性塊組合到形狀為 (N,C,output_size[0],output_size[1],)(N, C, \text{output\_size}[0], \text{output\_size}[1], \dots) 的大 output 張量中。與 Unfold 類似,引數必須滿足

L=doutput_size[d]+2×padding[d]dilation[d]×(kernel_size[d]1)1stride[d]+1,L = \prod_d \left\lfloor\frac{\text{output\_size}[d] + 2 \times \text{padding}[d] % - \text{dilation}[d] \times (\text{kernel\_size}[d] - 1) - 1}{\text{stride}[d]} + 1\right\rfloor,

其中 dd 表示所有空間維度。

  • output_size 描述了包含滑動區域性塊的大張量的空間形狀。當多個輸入形狀對映到相同數量的滑動塊時(例如,stride > 0 時),它有助於解決歧義。

paddingstridedilation 引數指定了如何檢索滑動塊。

  • stride 控制滑動塊的步長。

  • padding 控制在重塑之前,每個維度在兩側新增 padding 數量的隱式零填充。

  • dilation 控制核點之間的間距;也稱為 à trous 演算法。這很難描述,但這個 連結 有一個很好的視覺化展示了 dilation 的作用。

引數
  • output_size (inttuple) – 輸出張量空間維度(即 output.sizes()[2:])的形狀

  • kernel_size (inttuple) – 滑動塊的大小

  • dilation (inttuple, 可選) – 控制鄰域內元素步長的引數。預設值: 1

  • padding (inttuple, 可選) – 在輸入兩側新增的隱式零填充數量。預設值: 0

  • stride (inttuple) – 輸入空間維度中滑動塊的步長。預設值: 1

  • 如果 output_sizekernel_sizedilationpaddingstride 是 int 或長度為 1 的 tuple,則其值將應用於所有空間維度。

  • 對於兩個輸出空間維度的情況,此操作有時稱為 col2im

注意

Fold 透過對所有包含塊中的所有值求和來計算結果大張量中的每個組合值。Unfold 透過從大張量複製來提取區域性塊中的值。因此,如果塊重疊,它們不是彼此的逆運算。

通常,摺疊 (folding) 和展開 (unfolding) 操作之間的關係如下。考慮使用相同引數建立的 FoldUnfold 例項

>>> 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 操作互為逆運算(常數因子除外)。

警告

目前,僅支援非批次 (3D) 或批次 (4D) 影像狀輸出張量。

形狀
  • 輸入: (N,C×(kernel_size),L)(N, C \times \prod(\text{kernel\_size}), L)(C×(kernel_size),L)(C \times \prod(\text{kernel\_size}), L)

  • 輸出: (N,C,output_size[0],output_size[1],)(N, C, \text{output\_size}[0], \text{output\_size}[1], \dots)(C,output_size[0],output_size[1],)(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 的全面開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深入教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源