Непрерывная память тензора в PyTorch
После перестановки осей элементы
часто лежат в памяти с шагом между
соседними ячейками. Метод view
ожидает сплошной порядок,
поэтому прямой вид после
transpose обычно недоступен.
Метод contiguous при необходимости
создаёт копию с непрерывной памятью;
если порядок уже сплошной, возвращается
тот же тензор. Создадим таблицу,
поменяем оси местами, выровняем память
и зададим вид:
import torch
grid = torch.tensor([[1, 2, 3], [4, 5, 6]])
swapped = grid.transpose(0, 1)
aligned = swapped.contiguous()
flat = aligned.view(6)
print(flat) # выведет tensor([1, 4, 2, 5, 3, 6])
Без шага contiguous вызов
view на переставленном тензоре
завершится ошибкой: память не
совпадает с запрошенной формой.
Рабочий порядок - перестановка,
затем выравнивание, затем вид.
Соберите таблицу 2 на 4
из последовательных целых, начиная
с 1, поменяйте местами
ряды и столбцы и выведите
один ряд из восьми чисел
в порядке чтения по столбцам
исходной таблицы.
Создайте таблицу из рядов
[1, 2] и [3, 4],
транспонируйте её, подготовьте
память к сплошному порядку
и выведите длину получившегося
ряда после свёртки в одну ось.
Создайте таблицу 3 на 2
с любыми целыми, переставьте оси
0 и 1, затем сверните
в ряд из 6 чисел и выведите
первое и последнее число ряда.