Свертка
-
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 или кортеж) – размер скользящих блоков
- stride (int или кортеж) – шаг скользящих блоков во входных пространственных измерениях. По умолчанию: 1
- padding (int или кортеж, необязательно) – неявное дополнение нулями с обеих сторон входа. По умолчанию: 0
- dilation (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/1.13/generated/torch.nn.Fold.html