Часть I. Основные операции с тензорами

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

В этой статье будут рассмотрены следующие темы:
1. Что такое тензоры
2. Разница между базовыми массивами и тензорами
3. Как создавать тензоры
4. Основные математические операции с использованием Тензоры

Что такое Питорч?

PyTorch — это библиотека машинного обучения с открытым исходным кодом, основанная на библиотеке Torch, используемая для таких приложений, как компьютерное зрение и обработка естественного языка, в первую очередь разработанная исследовательской лабораторией искусственного интеллекта Facebook.

В чем разница между Numpy и Pytorch?

Проще говоря, Numpy создает массивы, которые будут работать в памяти вашего процессора. Используя Pytorch, вы можете создавать тензоры, которые могут использовать GPU для быстрой обработки.

У тензоров есть некоторые дополнительные функции, такие как Auto grad, которые помогут реализовать нейронные сети гораздо проще.

Самое важное различие между этими двумя фреймворками — именование. Numpy вызывает массивы тензоров (матриц или векторов большой размерности), в то время как в PyTorch есть просто тензоры. Все остальное очень похоже.

Почему ПиТорч?

Даже если вы уже знакомы с Numpy, все равно есть несколько причин переключиться на PyTorch для тензорных вычислений. Основная причина — ускорение графического процессора. Как вы увидите, использовать GPU с PyTorch очень просто и очень быстро. Если вы выполняете большие вычисления, это полезно, потому что это значительно ускоряет работу.

Почему Нампи?

Numpy — наиболее часто используемая вычислительная среда для линейной алгебры. Хороший пример использования Numpy — быстрые эксперименты и небольшие проекты, потому что Numpy — это облегченная структура по сравнению с PyTorch.

ПРИМЕЧАНИЕ. Если на вашем компьютере не установлен PyTorch. Попробуйте использовать совместную лабораторию Google или блокноты Kaggle.





Давайте начнем !

import torch 
import numpy as np

Создание тензоров с помощью Torch

Тензор — это размерная структура данных. Векторы — это одномерные структуры данных, а матрицы — двумерные структуры данных. Тензоры внешне похожи на эти другие структуры данных, но разница в том, что они могут существовать в размерностях от нуля до n.

Создание тензоров из простых списков и из массивов Numpy

data = [[1 , 2 ] , [3 , 4]]
np.array(data)
data = torch.tensor(data)

Чтобы проверить тип данных, просто напишите

data.dtype

Создание пустого тензора размером 3 строки x 4 столбца

a = torch.empty(size =(3,4))
a

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

Создание пустого двумерного тензора с размером (3 строки x 4 столбца)

b = torch.empty(size=(2 , 3 ,4))
b

Создание тензора с размером (3 строки x 4 столбца) и инициализация всех значений до 1

a =torch.ones(size = (3,4))
print(a)
print(a*3)

Создание тензора с диапазоном чисел

print(torch.arange(10))
print(torch.arange(10).shape)

torch.linspace(start = 1 , end = 10 , steps  = 20)

Создание тензора с использованием массивов Numpy

arr = np.arange(10)
torch.tensor(arr)

Чтобы изменить тип данных тензора, просто напишите

torch.tensor(arr , dtype = torch.float32)

Чтобы преобразовать массив Tensor в Numpy, напишите

t.numpy()

Создание тензора с диагональными значениями

torch.eye(3)

t1 = torch.diag(torch.arange(5))
t1

torch.diag(t1)

Создание массива со случайными числами размером 3 строки и 4 столбца

torch.rand(size = (3 ,4))

x = torch.ones(size = (3 , 4))
y = torch.ones(size = (3 , 4))*4
print(x ,"\n\n", y)

Добавление двух тензоров

Существуют разные способы добавления тензоров

#1
z = torch.empty(size = (3,4))
torch.add(x,y ,out=z)

#2
z = torch.add(x ,y)
z

#3
z = x+y
z

Создание другой переменной для хранения значений требует памяти, чтобы избежать этого, вы можете добавить две переменные и сохранить сумму в одной переменной.

#x+=y
x.add_(y) ## to save memory

Умножение между двумя тензорами

Существуют разные способы умножения двух тензоров.

#1
x = torch.ones(size = (3 , 4))
y = torch.ones(size = (4, 5))*3
torch.matmul(x,y)

#2
torch.mm(x , y)

Пакетное умножение

batch = 10
m = 30
n = 20
k = 10
x = torch.rand(size =(batch , m , n ))
y = torch.rand(size =(batch , n , k ))
torch.bmm(x,y).shape

Изменение формы и размера тензоров

t = torch.arange(15)
t

t.shape

t.unsqueeze(axis = 0 ).shape #row

t.unsqueeze(axis = 1)

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

t.view(3,5)

t1 = torch.linspace(0 , 15 , 24)
t1

t1.shape

t1.view(2 , 3 ,4 )
# 2 dimensions , 3 rows , 4 columns

t1.reshape(2 , 3 , 4)
# 2 dimensions , 3 rows and 4 columns

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

Скопируйте и отредактируйте этот блокнот Kaggle для практики:



Здесь Проверьте вторую часть этой серии! 👇





Стань ML-писателем