Spec-Zone.ru › PyTorch 2.14

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.) Эта операция объединяет локальные блоки в большой тензор output формы (N,C,output_size[0],output_size[1],…)(N, C, \text{output\_size}[0], \text{output\_size}[1], \dots), суммируя перекрывающиеся значения. Как и для Unfold, аргументы должны удовлетворять условию

L=∏d⌊output_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.

Аргументы padding, stride и dilation задают способ извлечения блоков со скользящим окном.

  • stride задаёт шаг перемещения скользящих блоков.
  • padding задаёт размер неявного дополнения нулями с обеих сторон для padding количества точек в каждом измерении перед изменением формы.
  • dilation задаёт расстояние между точками ядра; этот метод также известен как алгоритм à trous. Его сложнее описать, но по этой ссылке можно посмотреть наглядную визуализацию того, что делает dilation.
Параметры:
  • output_size (int или tuple) – форма пространственных размерностей выходных данных (т. е. output.sizes()[2:])
  • kernel_size (int или tuple) – размер скользящих блоков
  • dilation (int или tuple, необязательно) – параметр, задающий шаг между элементами в окрестности. По умолчанию: 1
  • padding (int или tuple, необязательно) – неявное дополнение входных данных нулями с обеих сторон. По умолчанию: 0
  • stride (int или tuple) – шаг скользящих блоков по пространственным размерностям входных данных. По умолчанию: 1
  • Если output_size, kernel_size, dilation, padding или stride является целым числом или кортежем длины 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:

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

Если тензор divisor не содержит нулевых элементов, то операции fold и unfold являются обратными друг другу (с точностью до постоянного делителя).

Предупреждение

В настоящее время поддерживаются только выходные тензоры в форме изображений без пакета (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])
extra_repr() [исходный код]

Возвращает дополнительное представление модуля.

Тип возвращаемого значения:

str

forward(input) [исходный код]

Выполняет прямой проход.

Тип возвращаемого значения:

Tensor

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.nn.Fold.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API