Функция F.pad
Функция F.pad дополняет тензор значениями по указанным осям.
Первым параметром функция принимает входной тензор.
Вторым параметром - кортеж с количеством элементов для дополнения по каждому измерению.
Третьим параметром можно указать режим дополнения: 'constant', 'reflect',
'replicate' или 'circular'.
Для режима 'constant' можно задать значение через параметр value.
Синтаксис
torch.nn.functional.pad(input, pad, mode='constant', value=0)
Пример
Давайте дополним одномерный тензор нулями по одному элементу слева и справа:
import torch
import torch.nn.functional as F
t = torch.tensor([1, 2, 3, 4, 5])
res = F.pad(t, pad=(1, 1), mode='constant', value=0)
print(res)
Результат выполнения кода:
tensor([0, 1, 2, 3, 4, 5, 0])
Пример
Дополним двумерный тензор по строкам и столбцам с разными значениями:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
])
res = F.pad(t, pad=(1, 2, 1, 0), mode='constant', value=-1)
print(res)
Результат выполнения кода:
tensor([
[-1, -1, -1, -1, -1, -1],
[-1, 1, 2, 3, -1, -1],
[-1, 4, 5, 6, -1, -1],
])
Пример
Используем режим отражения для дополнения трёхмерного тензора:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
])
res = F.pad(t, pad=(1, 1, 1, 1), mode='reflect')
print(res)
Результат выполнения кода:
tensor([
[5, 4, 5, 6, 5],
[2, 1, 2, 3, 2],
[5, 4, 5, 6, 5],
[2, 1, 2, 3, 2],
])
Пример
Применим режим копирования для дополнения одномерного тензора:
import torch
import torch.nn.functional as F
t = torch.tensor([1, 2, 3, 4, 5])
res = F.pad(t, pad=(3, 2), mode='replicate')
print(res)
Результат выполнения кода:
tensor([1, 1, 1, 1, 2, 3, 4, 5, 5, 5])
Пример
Используем циклический режим для дополнения двумерного тензора:
import torch
import torch.nn.functional as F
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
])
res = F.pad(t, pad=(2, 1, 1, 2), mode='circular')
print(res)
Результат выполнения кода:
tensor([
[6, 4, 5, 6, 4, 5],
[3, 1, 2, 3, 1, 2],
[6, 4, 5, 6, 4, 5],
[3, 1, 2, 3, 1, 2],
[6, 4, 5, 6, 4, 5],
])
Смотрите также
-
функцию
interpolate,
которая изменяет размер тензора с интерполяцией -
функцию
unfold,
которая извлекает скользящие блоки из тензора -
функцию
fold,
которая объединяет скользящие блоки обратно в тензор -
функцию
conv2d,
которая часто использует дополнение для сохранения размеров