Работаем с тензорами в numpy

Сегодня рассмотрим, что такое тензоры, зачем они нужны в Machine Learning и как Python-библиотека NumPy помогает создавать их. Читайте в нашей статье про ранги тензоров и другие атрибуты этой структуры данных в Python.

Что такое тензоры и при чем тут Data Science

Числа — основа вычислений компьютера, и более того средство конечного отображения любых данных: от художественного текста до графики и видео. Методы Data Science и Machine Learning тоже трансформируют информацию в числовую форму, чтобы работать с ней. Такими наборами чисел являются тензоры – в Python-библиотеке NumPy структуры данных в виде массивов, т.е. array [1].Тензоры имеют следующие атрибуты:

  • ранг – количество осей. В двумерном тензоре ранг равен 2, трехмерный — 3 и т.д.
  • форма, определяющая количество элементов на каждой из осей;
  • тип данных – int32, float32 и другие числовые типы.

Прежде чем начать работу с тензорами в библиотеке numpy, ее нужно импортировать. Для обращения к ней будем использовать символы np:

import numpy as np

У массивов numpy есть атрибут ndim — ранг и shape — форма. Далее разберем на практических примерах, как с ними работать.

Скаляры и векторы в numpy

Тензор нулевого ранга или скаляр – это обычное число. В numpy он создается очень просто:

>>> a = np.array(10)
>>> a
array(10)

Ранг у него нулевой:

>>> a.ndim
0

И форма у него отсутствует:

>>> a.shape
()

Тензор первого ранга или вектор – это массив скаляров, который создается следующим образом:

>>> a = np.array([1, 2, 3, 4, 5])
>>> a
array([1, 2, 3, 4, 5])

Ранг у него 1-й:

>>> a.ndim
1

Форма у вектора соответствует количеству элементов:

>>> a.shape
(5,)

Тензоры 2-го ранга и выше в numpy

Тензор второго ранга или матрица представляет собой это массив векторов. В numpy он создается так:

>>> a = np.array([[1, 2, 13, 14],
                  [5, 6, 17, 18],
                  [9, 3, 11, 12]])
>>> a
array([[ 1,  2, 13, 14],
       [ 5,  6, 17, 18],
       [ 9,  3, 11, 12]])

Ранг у него 2-й:

>>> a.ndim
2

Форма у матрицы соответствует количеству строк и столбцов (3 строки и 4 столбца):

>>> a.shape
(3, 4)

Тензор третьего ранга — это массив матриц без отдельного наименования. В numpy он создается следующим образом:

>>> a = np.array([[[10, 11, 12, 13],
                  [14, 15, 16, 17],
                  [18, 19, 20, 21]],
                 [[22, 23, 24, 25],
                  [26, 27, 28, 29],
                  [30, 31, 32, 33]],
                 [[34, 35, 36, 37],
                  [38, 39, 40, 41],
                  [42, 43, 44, 45]]])

>>> a
array([[[10, 11, 12, 13],
        [14, 15, 16, 17],
        [18, 19, 20, 21]],
       [[22, 23, 24, 25],
        [26, 27, 28, 29],
        [30, 31, 32, 33]],
       [[34, 35, 36, 37],
        [38, 39, 40, 41],
        [42, 43, 44, 45]]])

Ранг у него 3-й:

>>> a.ndim
3

Форма у тензора соответствует количеству матриц (3), числу строк (3) и столбцов (4) в каждой из них:

>>> a.shape
(3, 3, 4)

Тензор четвертого ранга — это массив тензоров третьего ранга, тензор пятого ранга — это массив тензоров четвертого ранга и т.д. Например, изображения можно закодировать как тензор 4-го ранга, а видео – как тензор 5-го ранга.

Где используются тензоры: применение в Data Science

Как мы уже отметили выше, тензоры позволяют представить изначально не числовую информацию в числовой форме. Например, изображение в оттенках серого представляется как матрица пикселей, где элемент равный 0 соответствует белому цвету, а 255 — черному, остальные являются переходными между белым и черным.

Отображение тензора 3-го ранга как матрицу пикселей
Матрица пикселей

Совокупность таких изображений составляют образцы (samples). Тогда форма тензора с этими изображениями будет иметь вид: (образцы, высота, ширина)

У цветных изображений 3 канала цвета, поэтому его форма включает еще цвет: (образцы, цвет, высота, ширина).

Тексты можно представить виде матрицы, где предложение – это строка, а элемент в ней – закодированное слово. Видео – это совокупность изображений в каждом кадре, поэтому к форме тензора добавится атрибут в виде кадра.

 

В следующей статье мы продолжим разговор про тензоры в Data Science и Machine Learning и рассмотрим, как в Python можно управлять ими, извлекая из них нужные компоненты. Еще больше технических подробностей о работе с тензорами и представлением данных для Machine Learning, вы узнаете на практических курсах по Python в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве.

Источники

  1. https://numpy.org/doc/1.18/reference/generated/numpy.array.html

Добавить комментарий

Поиск по сайту