Порядок менять нельзя. Форма (3, 64, 64, 32) описывает совсем другие данные, хотя чисел в ней ровно столько же.
Ещё одно, здесь часто путаются. Сравните две формы:
(32, 64, 64, 3) тридцать два снимка
(64, 64, 3) один снимок
Что произошло с первой осью? Она исчезла — потому что снимок один и считать нечего. Число примеров дописывают первой осью только тогда, когда данные подают пачкой.
Первая ось считает примеры, последняя описывает один пример.
Сколько чисел в тензоре
Число элементов — произведение всех размеров, а не их сумма.
Для формы (32, 64, 64, 3): 64 · 64 = 4096 пикселей в снимке, умножаем на 3 — получается 12 288 чисел на снимок, и на 32 снимка — 393 216 чисел.
Тридцать две небольшие картинки дают почти четыреста тысяч чисел. Этот порядок величин объяснит многое в главе 7, где речь пойдёт о изображениях.
Срезы
Из таблицы постоянно нужно достать не всё, а часть: один заказ или один признак у всех заказов. Для этого есть срезы.
Срез — способ получить часть тензора, указав, что брать по каждой оси.
Запись x[0] даёт нулевой заказ целиком, все три его числа: 4, 2, 6. Это строка таблицы, её форма — (3,).
Запись x[:, 0] даёт нулевой признак — расстояние — сразу у всех четырёх заказов: 4, 1, 2, 6. Это столбец таблицы, его форма — (4,).
Двоеточие читается как «все». На первом месте стоит номер заказа, на втором — номер признака. Двоеточие на первом месте означает «все заказы».
Путаница между этими двумя записями — самая частая ошибка этой главы, и она коварна тем, что программа не остановится с ошибкой. Она посчитает не то и ничего не сообщит.
Переразложение
reshape — операция, которая меняет форму тензора, не меняя самих чисел: она перекладывает их по другим осям.
Количество элементов обязано сойтись. Двадцать четыре числа лягут в форму (4, 6) или (2, 3, 4), но не в (5, 5): двадцать пять не равно двадцати четырём.
Если вместо одного из размеров поставить −1, он будет вычислен из остальных. Двадцать четыре числа при запросе reshape(-1, 3) дадут форму (8, 3), потому что 24 : 3 = 8.
Две вещи про reshape, на которых спотыкаются почти все.
Первая: результат может оказаться не отдельным набором чисел, а другим взглядом на те же самые. Библиотека сама решает, получится ли обойтись без копирования, и заранее это не известно. Поэтому, изменив результат, иногда вы измените и исходный тензор, а иногда нет. Полагаться на одно из двух нельзя: если исходные числа нужны нетронутыми, копию делают явно.
Вторая: формы (3,) и (3, 1) — разные, хотя чисел в них поровну, и складываются они с другими тензорами по-разному. Почему — в следующем разделе.