Метод contiguous
Метод contiguous преобразует тензор к непрерывному формату хранения в памяти. В PyTorch тензоры могут храниться в виде, где элементы не следуют друг за другом в порядке их индексов из-за операций перестановки осей или транспонирования. Метод contiguous возвращает новый тензор с тем же содержимым, но с гарантированно непрерывным расположением элементов. Если тензор уже непрерывен, метод возвращает сам тензор без копирования.
Синтаксис
t.contiguous([memory_format])
Метод contiguous не принимает обязательных параметров. Необязательный параметр memory_format позволяет указать желаемый формат хранения: torch.contiguous_format (по умолчанию), torch.channels_last или torch.channels_last_3d.
Пример
Проверим, является ли тензор непрерывным после создания:
import torch
t = torch.tensor([[1, 2, 3], [4, 5, 6]])
print(t.is_contiguous())
Результат выполнения кода:
True
Пример
После транспонирования тензор часто становится не непрерывным:
import torch
t = torch.tensor([[1, 2, 3], [4, 5, 6]])
t_transposed = t.t()
print(t_transposed.is_contiguous())
Результат выполнения кода:
False
Метод contiguous создаёт непрерывную копию:
import torch
t = torch.tensor([[1, 2, 3], [4, 5, 6]])
t_transposed = t.t()
t_contiguous = t_transposed.contiguous()
print(t_contiguous.is_contiguous())
Результат выполнения кода:
True
Пример
Преобразование тензора с использованием параметра memory_format:
import torch
t = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
t_contiguous = t.contiguous(memory_format=torch.channels_last)
print(t_contiguous.is_contiguous())
Результат выполнения кода:
True
Смотрите также
-
метод
is_contiguous,
который проверяет, является ли тензор непрерывным -
метод
transpose,
который меняет порядок осей тензора -
метод
permute,
который переставляет оси тензора в указанном порядке -
метод
clone,
который создаёт копию тензора с сохранением истории градиентов