Свертка
-
class torch.nn.Fold(output_size, kernel_size, dilation=1, padding=0, stride=1)[source] -
Объединяет массив скользящих локальных блоков в большой содержащий тензор.
Рассмотрим пакетный
inputтензор, содержащий скользящие локальные блоки, например, блоки изображений, с формой , где — размерность пакета, — количество значений в блоке (блок имеет пространственных локаций, каждая из которых содержит вектор с каналами), а — общее количество блоков. (Это точно такое же описание, как форма выходных данныхUnfold.) Эта операция объединяет эти локальные блоки в большойoutputтензор с формой путём суммирования перекрывающихся значений. АналогичноUnfold, аргументы должны удовлетворятьгде — по всем пространственным измерениям.
-
output_sizeописывает пространственную форму большого содержащего тензора скользящих локальных блоков. Это полезно для разрешения неоднозначности, когда несколько форм входных данных отображаются на одинаковое количество скользящих блоков, например, сstride > 0.
Аргументы
padding,strideиdilationуказывают, как извлекаются скользящие блоки.-
strideуправляет шагом скользящих блоков. -
paddingуправляет количеством неявных нулевых дополнений с обеих сторон дляpaddingколичества точек для каждого измерения перед преобразованием формы. -
dilationуправляет расстоянием между точками ядра; также известен как алгоритм à trous. Его сложнее описать, но эта ссылка содержит хорошую визуализацию того, что делаетdilation.
- Параметры
-
-
output_size (int или кортеж) – форма пространственных измерений вывода (т.е.,
output.sizes()[2:]) - kernel_size (int или кортеж) – размер скользящих блоков
- dilation (int или кортеж, необязательно) – параметр, который управляет шагом элементов в окрестности. По умолчанию: 1
- padding (int или кортеж, необязательно) – неявное нулевое заполнение, добавляемое с обеих сторон входа. По умолчанию: 0
- stride (int или кортеж) – шаг скользящих блоков во входных пространственных измерениях. По умолчанию: 1
-
output_size (int или кортеж) – форма пространственных измерений вывода (т.е.,
- Если
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) тензоры вывода, похожие на изображения.
-
- Форма:
-
- Вход: или
- Выход: или как описано выше
Примеры:
>>> 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])
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.nn.Fold.html