РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
82 of 769 menu

Атрибут is_contiguous

Атрибут is_contiguous класса Tensor представляет собой булево значение, которое показывает, хранятся ли данные тензора в оперативной памяти непрерывным блоком в том порядке, в котором они перечисляются при итерации по тензору. По умолчанию все тензоры, созданные через torch.tensor или большинство операций, являются непрерывными. Однако такие операции, как transpose, permute или narrow, могут создавать представления, которые не являются непрерывными.

Непрерывность важна для производительности, поскольку многие низкоуровневые операции в PyTorch ожидают непрерывные тензоры для эффективной работы. Если тензор не является непрерывным, многие операции неявно вызывают contiguous, что может привести к дополнительным накладным расходам на копирование данных.

Синтаксис

tensor.is_contiguous()

Атрибут не принимает аргументов и возвращает логическое значение True, если тензор непрерывен, и False в противном случае.

Пример

Давайте создадим обычный тензор и проверим его непрерывность:

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.transpose(0, 1) print(t_transposed.is_contiguous())

Результат выполнения кода:

False

Пример

Метод contiguous создаёт копию тензора, данные которой расположены непрерывно:

import torch t = torch.tensor([[1, 2, 3], [4, 5, 6]]) t_transposed = t.transpose(0, 1) t_contiguous = t_transposed.contiguous() print(t_contiguous.is_contiguous())

Результат выполнения кода:

True

Пример

Рассмотрим ситуацию, когда неявное приведение к непрерывному виду может произойти автоматически:

import torch t = torch.tensor([[1, 2, 3], [4, 5, 6]]) t_transposed = t.transpose(0, 1) res = t_transposed.view(-1) # view требует непрерывный тензор print(res)

Результат выполнения кода:

RuntimeError: view size is not compatible with input tensor's size and stride.

В этом примере метод view не может быть применён к не непрерывному тензору. Чтобы исправить ошибку, нужно сначала сделать тензор непрерывным:

import torch t = torch.tensor([[1, 2, 3], [4, 5, 6]]) t_transposed = t.transpose(0, 1) t_contiguous = t_transposed.contiguous() res = t_contiguous.view(-1) print(res)

Результат выполнения кода:

tensor([1, 4, 2, 5, 3, 6])

Смотрите также

  • метод contiguous,
    который создаёт непрерывную копию тензора
  • метод transpose,
    который меняет местами две оси тензора
  • метод view,
    который изменяет форму тензора без копирования данных
  • метод reshape,
    который изменяет форму тензора с возможным копированием
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить