На этом шаге мы перечислим операции, меняющие форму тензора.
Третий вид операций с тензорами, который мы должны рассмотреть, - это изменение формы тензора. Данная операция не применяется в слоях 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)
На следующем шаге мы рассмотрим геометрическую интерпретацию операций с тензорами.