Spec-Zone.ru › PyTorch 2.14

Fold

class torch.nn.modules.fold.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.modules.fold.Fold.html

Spec-Zone.ru

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