На этом шаге мы перечислим операции, меняющие форму тензора.
Третий вид операций с тензорами, который мы должны рассмотреть, - это изменение формы тензора. Данная операция не применяется в слоях Dense нашей нейронной сети, но мы использовали ее, когда готовили исходные данные для передачи в модель:
train_images = train_images.reshape((60000, 28 * 28))
Изменение формы тензора предполагает такое переупорядочение строк и столбцов, чтобы привести его форму к заданной. Разумеется, тензор новой формы имеет такое же количество элементов, что и исходный. Чтобы было понятнее, рассмотрим несколько простых примеров:
>>> x = np.array([[0., 1.],
[2., 3.],
[4., 5.]])
>>> x.shape (3, 2)
>>> x = x.reshape((6, 1))
>>> x
array([[ 0.],
[ 1.],
[ 2.],
[ 3.],
[ 4.],
[ 5.]])
>>> x = x.reshape((2, 3))
>>> x
array([[ 0., 1., 2.],
[ 3., 4., 5.]])
Особый случай изменения формы, который часто встречается в практике, - это транспонирование. Транспонирование - это такое преобразование матрицы, когда строки становятся столбцами, а столбцы - строками; то есть x[i, :] превращается в x[:, i]:
>>> x = np.zeros((300, 20)) # Создаст матрицу с формой (300, 20), заполненную нулями >>> x = np.transpose(x) >>> print(x.shape) (20, 300)
На следующем шаге мы рассмотрим геометрическую интерпретацию операций с тензорами.