Резюме: мне нравится учиться, играя с кодом и делясь своими знаниями через подобные блоги. В этом сообщении блога содержится краткое введение в тензоры, например, что такое тензор, его атрибуты и чем он отличается от матрицы, а также некоторые примеры кода, за которыми следуют варианты его использования. Чтобы увидеть больше подобных сообщений на тему Основы машинного обучения, подпишитесь на меня здесь или в Твиттере - Shaistha Fathima.

Вот ссылка на все сообщения из серии Введение в «Тензоры»:

Если интересно, вы также можете проверить другую серию статей на тему Основные концепции, которые вы должны знать, прежде чем начинать работу с« Нейронными сетями (NN)» »

Что такое тензоры ?!

Тензоры - это основные строительные блоки современного машинного обучения. Вы можете думать о них как о контейнере, в котором хранятся числа, которые мы называем числовыми данными.

Типы тензоров:

0-мерный тензор / скаляр: контейнер с числом, скажем 23, 5 или 4 и т. д., называется 0-мерным тензором (или просто скалярной единицей в общей науке!).

1-мерный тензор / вектор: Если вы немного помните физику (Ааа !! Эти бесконечные занятия…. Я знаю, честно, мне больше нравилась химия !! возвращаюсь ..) , вектор был ??… Да, вектор - это математический объект, который имеет размер, называемый величиной, и направление. Итак, ты помнишь ... просто возился с тобой ... ха-ха!

А теперь серьезно, если вы знаете какой-либо язык программирования, вы можете правильно вспомнить что-то, называемое «массивами»! Да, одномерные массивы - это не что иное, как строка данных, хранящихся в одной строке или столбце. В глубоком обучении мы называем это одномерным тензором! Одномерные массивы также известны как векторы!

Думаю, теперь можно сложить по кусочкам? что такое двумерный тензор?… Да, он называется «Матрица»! Спорим, вы все это знали!

Так что же такое трехмерный тензор?…

Ага! Это просто тензор, никаких лишних имен….

Итак, в общем случае мы называем двумерный массив матрицей, но все, что выше, можно назвать просто «тензором». (т.е. в глубоком обучении - хотя многомерные матрицы существуют!)

Собирая все вместе, тензоры можно представить как многомерный массив или можно просто назвать обобщенной формой матрицы. Если вы помните, массивы, основанные на их индексах, обобщаются как скалярные, векторные или матричные, как показано ниже, или просто числовые, 1D-массивы, 2D-массивы в информатике, когда индексы равны 0, 1, 2 соответственно и любой индекс выше 2, будет просто записываться как тензор!

Термин «ранг» используется для определения измерения или индексов тензора.

Пример, 2-мерный тензор имеет ранг = 2; 3-мерный тензор имеет ранг = 3

Это может не иметь особого смысла! Но, поверьте мне, вам нужно просто помнить, что тензоры - это не что иное, как n-мерные матрицы, не вдаваясь в подробности!

Например, массив с индексами 3 - это трехмерный тензор (хорошо, хорошо, трехмерная матрица тоже такая же) Итак, чем они отличаются?

Если вы настаиваете, согласно википедии: в математике тензор - это алгебраический объект, связанный с векторным пространством и его Двойное пространство, которое может принимать несколько различных форм, например, скаляр, касательный вектор в точке, котангенс-вектор (двойственный вектор) в точке или полилинейное отображение между векторные пространства. Евклидовы векторы и скаляры (которые часто используются в элементарной физике и инженерных приложениях, где общая теория относительности не имеет значения) являются простейшими тензорами. [1] Хотя тензоры определены независимо от любого базиса, в литературе по физике часто относится к ним по их компонентам в основе, относящейся к определенной системе координат ……

Ладно! Это было слишком сложно ... Простое математическое определение было бы таким: тензор - это математический объект, аналогичный, но более общий, чем вектор, представленный массивом компонентов, которые являются функциями координаты пространства.

Проще говоря! Согласно удивительному объяснению Стивена Стейнке в его среднем сообщении в блоге под названием « Какая разница между матрицей и тензором? » (Обязательно прочтите !! Для лучшего понимания!)

Тензор - это математический объект, который живет в структуре и взаимодействует с другими математическими объектами. Если один преобразует другие объекты в структуре в обычным способом, то тензор должен подчиняться соответствующему правилу преобразования.

Это «динамическое» свойство тензора является ключевым отличием его от простой матрицы. Это командный игрок, числовые значения которого меняются вместе с числовыми значениями его товарищей по команде, когда вводится преобразование, затрагивающее всех из них.

Любой тензор ранга 2 может быть представлен в виде матрицы, но не каждая матрица на самом деле является тензором ранга 2. Числовые значения матричного представления тензора зависят от того, какие правила преобразования были применены ко всей системе.

Возвращаясь к прошлому, мы можем просто представить тензор как обобщенную форму матрицы, например, когда мы говорим трехмерный тензор, это может означать «куб» чисел!

Фундаментальные атрибуты тензора:

  • Ранг: Ранг представляет собой номер. измерений, присутствующих в тензоре или индексах.

Пример: трехмерный тензор, имеет индекс 3 или представляет собой трехмерный массив или матрицу.

  • Оси. Это особое измерение тензора, элементы которого считаются движущимися по этим осям. Зависит от «длины» оси, т. Е. количества доступных индексов вдоль оси.

Пример

a = [ [1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]]   
Tensor "a" has rank = 2; i.e., its a 2-D tensor, i.e., the index =2 so the no of axes = 2
Each element along the first axis represents -> [array] 
a[0] = [1,2,3]
a[1] = [4,5,6]
a[2] = [7,8,9]
Each element along the second axis represents-> [numbers/data]
a[0][0] = 1
a[0][1] = 2
a[0][2] = 3
.
.
  • Форма. Тензоры имеют свои собственные формы, которые задаются «длиной» каждой оси, т. е. количеством присутствующих индексов.

Пример: в тензоре размер и форма одинаковы

a = [ [1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]]
It is a 3 by 3 matrix i.e., with 3 rows and 3 columns
size or shape = [3,3]

Примечание: форму тензора можно изменить !! То есть строки и столбцы можно менять местами !!

Теперь мы знаем, что такое тензор, его атрибуты и чем он отличается от матрицы. Но это подводит нас к другому вопросу: Как и где мы его используем?

Как упоминалось в другом замечательном посте Дэниела Джеффриса на Hackernoon.

Тензоры - это контейнеры, правильно хранящие числа! Вот несколько распространенных типов наборов данных, которые мы храним в различных типах тензоров:

  • 3D Tensor = Временные ряды, цветные изображения RGB
  • 4D Tensor = изображения (jpeg)
  • 5D Tensor = Видео

Хорошо ... Как мы это делаем?

Почти в каждом из этих тензоров общим потоком будет размер выборки. Размер выборки - это количество вещей в наборе. Это может быть количество изображений, количество видео, количество документов или количество твитов.

Как правило, фактические данные будут на единицу меньше sample_size:

rest_of_dimensions - sample_size = actual_dimensions_of_data

Например, изображение действительно представлено тремя полями, например:

(width, height, color_depth) = 3D

Но обычно мы не работаем с одним изображением или документом в машинном обучении. У нас есть набор. У нас может быть 10 000 изображений тюльпанов, что означает, что у нас есть 4D тензор, например:

(sample_size, width, height, color_depth) = 4D

Данные временных рядов

Трехмерные тензоры очень эффективны для данных временных рядов.

Пример: Медицинское сканирование. Мы можем кодировать электроэнцефалограмму сигнал ЭЭГ от мозга как 3D-тензор, потому что он может быть инкапсулирован как 3 параметра:

(time, frequency, channel)

Если бы у нас было несколько пациентов с сканированием ЭЭГ, это стало бы тензором 4D, например:

(sample_size, time, frequency, channel)

Изображений

4D-тензоры отлично подходят для хранения серий изображений, таких как JPEG. Как мы отметили ранее, изображение сохраняется с тремя параметрами:

  • Рост
  • Ширина
  • Глубина цвета

Изображение представляет собой трехмерный тензор, но набор изображений делает его четырехмерным. Помните, что четвертое поле предназначено для sample_size.

В тензорном потоке для набора данных MNIST:

(sample_size, height, width, color_depth).

В то время как для Pytorch:

(sample_size,color_depth, height, width).

Цветные фотографии могут иметь разную глубину цвета в зависимости от их разрешения и кодировки. Типичное изображение JPG будет использовать RGB, поэтому оно будет иметь глубину цвета 3, по одному для каждого красного, зеленого, синего.

Пример: изображение классного кота. Это изображение размером 750 x 750 пикселей будет иметь следующие характеристики (750 750,3)

Следовательно, эта кошка была бы сведена к серии холодных уравнений, которые выглядели бы так, когда она «трансформировалась» или «текла».

Тогда, допустим, у нас была куча изображений разных типов кошек. Возможно, у нас есть 100000 пикселей в высоту и 750 пикселей в ширину. Мы бы определили этот набор данных в Pytorch как 4D тензор формы:

(10000,3,750,750) 

5D тензоры

Тензор 5D может хранить видеоданные. В TensorFlow видеоданные кодируются как:

sample_size, frames, width, height, color_depth)

Если мы возьмем пятиминутное видео (60 секунд x 5 = 300), с разрешением 1080p HD, что составляет 1920 пикселей x 1080 пикселей, с частотой дискретизации 15 кадров в секунду (что дает нам 300 секунд x 15 = 4500), с глубиной цвета из 3, мы сохраним этот четырехмерный тензор, который выглядит следующим образом:

(4500,1920,1080,3)

Пятое поле тензора вступает в игру, когда у нас есть несколько видео в нашем наборе видео. Итак, если бы у нас было 10 таких же видеороликов, как этот верхний, у нас был бы тензор формы 5D:

(10,4500,1920,1080,3)

Не будем пока углубляться в это ...

Заключение

Надеюсь, вы уже поняли, что такое тензоры и где их можно использовать. В следующем посте здесь мы впервые будем использовать тензоры в Pytorch, рассмотрим различные операции, которые он может выполнять.

Если у вас есть какие-либо сомнения относительно этой публикации, напишите мне!

А пока следите за обновлениями, и удачного кодирования!