Метод permute
Метод permute класса Tensor выполняет перестановку размерностей тензора.
Он принимает переменное количество аргументов - целых чисел, задающих новый порядок осей.
Метод возвращает новый тензор с переставленными размерностями, при этом данные не копируются,
а создаётся новое представление (view) исходного тензора.
Синтаксис
tensor.permute(dim0, dim1, ...)
Пример
Давайте создадим трёхмерный тензор размером (2, 3, 4) и переставим его оси в порядке (2, 0, 1):
import torch
t = torch.arange(24).reshape(2, 3, 4)
res = t.permute(2, 0, 1)
print(f"Shape after permute: {res.shape}")
Результат выполнения кода:
Shape after permute: torch.Size([4, 2, 3])
Пример
Рассмотрим перестановку осей двумерного тензора (матрицы), что эквивалентно транспонированию:
import torch
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
])
res = t.permute(1, 0)
print(res)
Результат выполнения кода:
tensor([
[1, 4],
[2, 5],
[3, 6],
])
Пример
Перестановка осей четырёхмерного тензора, что часто используется при работе с батчами изображений (размерности: батч, каналы, высота, ширина):
import torch
t = torch.randn(4, 3, 32, 32)
print(f"Original shape: {t.shape}")
# Меняем местами каналы и высоту
res = t.permute(0, 2, 1, 3)
print(f"New shape: {res.shape}")
Результат выполнения кода:
Original shape: torch.Size([4, 3, 32, 32])
New shape: torch.Size([4, 32, 3, 32])
Пример
Метод permute позволяет менять порядок осей в произвольном порядке. Порядок размерностей указывается через аргументы:
import torch
t = torch.tensor([
[[1, 2], [3, 4]],
[[5, 6], [7, 8]],
])
print(f"Original shape: {t.shape}")
res = t.permute(2, 0, 1)
print(f"Shape after permute: {res.shape}")
Результат выполнения кода:
Original shape: torch.Size([2, 2, 2])
Shape after permute: torch.Size([2, 2, 2])