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

Тензоры и их формы

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

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

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

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

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


Тензор

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

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

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

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

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

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

Первая ось — сколько, последняя — что.

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



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

Датасет собран из 200 цветных фотографий размером 64 на 64 пикселя. Каждый пиксель описан тремя числами — яркостями красного, зелёного и синего. Массив имеет форму (200, 64, 64, 3). Сколько всего чисел хранится в этом массиве?

Срезы

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

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

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


Массив x имеет форму (10, 20, 30). Какая форма будет у x[2]?

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

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


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


В массиве 24 числа. Отметь все вызовы reshape, которые выполнятся без ошибки.

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

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

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

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


Тензор формы (12, 5) переразложили вызовом reshape(-1, 3). Чему равна первая ось результата?
Загрузка...
Чтобы оставить комментарий, необходимо авторизоваться
💬
Пока нет комментариев. Будьте первым!
Печать