Статья Автор: Деникина Н.В., Деникин А.В.

Тензор и форма

Откуда берётся таблица чисел

Сеть не умеет читать текст, смотреть картинки и слушать звук. Она умеет ровно одно: складывать и умножать числа.

Значит, что бы ты ей ни скармливал, это сначала раскладывают в числа по полочкам.

Выгрузка заказов из базы уже так устроена: строка - заказ, столбец - признак.
Фотография тоже: строка пикселей, столбец пикселей, а в каждом пикселе три числа - яркости красного, зелёного и синего.

Разница между выгрузкой и фотографией только в том, сколько нужно полочек.


Тензор

Тензор - числа одного типа, разложенные по осям так, что вдоль каждой оси их поровну.

Одна ось - вектор, две - матрица, дальше отдельных названий не придумали и говорят просто «тензор».

Условие «поровну» важнее, чем кажется. Если у одного заказа записан адрес подъезда, а у другого нет, такую выгрузку в тензор не превратить, пока не решишь, чем заполнить дырки.

Форма - сколько элементов вдоль каждой оси, записанное в скобках через запятую.

ось 1 — признаки заказаось 0 — заказы4261822220604shape = (4, 3)км до адреса · светофоров на маршруте · свободных курьеров рядом

Первая ось почти всегда «сколько примеров». Последняя - «сколько чисел описывают один пример».

 

Та же выгрузка, но по нескольким городам, получит форму (городов, заказов, признаков). 



Вывод
(4, 3)
2
12
[4. 2. 6.]
[4. 1. 2. 6.]

Срезы

Срез - способ достать кусок массива, не переписывая цикл.

x[0] - нулевой заказ целиком, все три его числа: это строка выгрузки. x[:, 0] - нулевой признак, расстояние, у всех четырёх заказов: это столбец. Двоеточие читается как «все».

Путаница между строкой и столбцом - самая частая ошибка.


Массив имеет форму (64, 3, 32, 32). Сколько в нём чисел?

Переразложение

reshape меняет форму, не трогая сами числа: он перекладывает их по другим полочкам. Количество обязано сойтись - 24 числа лягут в (4, 6), но не в (5, 5).



Вывод
(4, 6)
(2, 3, 4)
(6, 4)
(24,)

Минус единица значит «преврати массив в одномерный  и посчитай размер этой оси сам».
 

Две особенности

Первая: reshape не копирует числа. Он показывает те же самые числа с других полочек, и, меняя результат, ты меняешь исходный массив.

Вторая: формы (3,) и (3, 1) — разные. Чисел в них поровну, а складываются они с другими массивами по-разному.


Тензор формы (12, 5) переразложили вызовом reshape(-1, 3). Чему равна первая ось результата?
Печать