Рубрики
Без рубрики

Начало работы с Pytorch

Это руководство направлено на ознакомление с концепцией тензоров в Pytorch и познакомить вас с операциями, связанными с тензорами в Pytorch. Pytorch.

Автор оригинала: Pankaj Kumar.

Это руководство направлено на ознакомление с концепцией тензоров в Pytorch и познакомить вас с операциями, связанными с тензорами в Pytorch. Модуль Pytorch работает с структурами данных, называемых тензоры , которые намного похоже на тех, кто из TenSorflow. Однако Pyyorchch не требует от вас определить весь вычислительный график априори. Это делает Pytorch гораздо проще отлаживать и понять.

Тензоры в Петорше

Тензуры являются многомерными структурами, аналогичными тем, которые происходят в модуле Numpy. Pytorch позволяет вам определить и манипулировать тензорами аналогичным образом для Numpy, а также конвертировать Numpy Tensors в Pytorch и Vice-Versa.

Pytorch находится в модуле факела. Вы должны иметь возможность запускать следующий код и получить версию PyTorch, как только вы закончите установку, следуя в этом руководстве.

import torch
from __future__ import print_function
torch.version.__version__

Выход:

'1.4.0'

Давайте определим наш первый тензор. Используя Torch.tensor () Метод является одним из многих способов сделать это.

x=torch.tensor([[2,3,4],[3,4,5]])
x

Выход:

tensor([[2, 3, 4],
        [3, 4, 5]])

Pytorch имеет метод IS_Tensor (), который проверяет, является ли переменная тензором или нет.

#Define an array of numbers.
x=[10,20,30,40,50]

#Check if x is a tensor
torch.is_tensor(x)

Выход:

False

Чтобы преобразовать массив X в тензор, нам нужно сделать следующее.

import numpy as np
arr=np.array(x) # creating a numpy array from the list we defined earlier
c=torch.from_numpy(arr) #create a tensor from the array
torch.is_tensor(c)

Выход:

True

Другие методы создания тензоров следующие:

#Create a tensor of random normal numbers using randn() function
y=torch.randn(3, 3)

#Create a tensor of zeros using torch.zeros()
a=torch.zeros(2,2)

#Create an identity tensor using torch.eye()
b=torch.eye(3,4)

#torch.linspace() - returns points within a given range in a linear space.
lin = torch.linspace(2,10,steps=25)

#torch.logspace() - returns points in a logarithmic space
log = torch.logspace(start=-10,end=10,steps=10)

#torch.rand() - returns specified number of random numbers within the # interval :math:`[0, 1)`

random = torch.rand(2, 3)

#random permutation of values between 0 to 10
perm = torch.randperm(10) 

#items between 2 and 10, equally spaced by 2. If the last parameter is # ignored, step size will be 1.

seq = torch.arange(2,10,2)

Теперь давайте рассмотрим, какие значения хранятся в каждой из тензоров выше.

print(y)
print(a)
print(b)
print(lin)
print(log)
print(random)
print(perm)
print(seq)

Выход:

tensor([[ 0.9039,  0.6291,  1.0795],
        [ 0.1586,  2.1939, -0.4900],
        [-0.1909, -0.7503,  1.9355]])

tensor([[0., 0.],
        [0., 0.]])

tensor([[1., 0., 0., 0.],
        [0., 1., 0., 0.],
        [0., 0., 1., 0.]])

tensor([ 2.0000,  2.3333,  2.6667,  3.0000,  3.3333,  3.6667,  4.0000,  4.3333,
         4.6667,  5.0000,  5.3333,  5.6667,  6.0000,  6.3333,  6.6667,  7.0000,
         7.3333,  7.6667,  8.0000,  8.3333,  8.6667,  9.0000,  9.3333,  9.6667,
        10.0000])

tensor([1.0000e-10, 1.6681e-08, 2.7826e-06, 4.6416e-04, 7.7426e-02, 1.2916e+01,
        2.1544e+03, 3.5938e+05, 5.9949e+07, 1.0000e+10])

tensor([[ 0.8237,  0.5781,  0.6879],
       [ 0.3816,  0.7249,  0.0998]])

tensor([9, 1, 4, 5, 8, 2, 7, 6, 3, 0])

tensor([2, 4, 6, 8])

Реструктуризация тензоров

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

t1=torch.rand(3,4)
t1

Выход:

tensor([[0.0800, 0.4987, 0.3337, 0.5070],
        [0.5671, 0.2567, 0.9441, 0.8524],
        [0.5343, 0.8898, 0.9503, 0.3900]])

Следующий код транспонирует тензор:

t1.t() 
tensor([[0.0800, 0.5671, 0.5343],
        [0.4987, 0.2567, 0.8898],
        [0.3337, 0.9441, 0.9503],
        [0.5070, 0.8524, 0.3900]])

Другая альтернатива использует функцию транспонирования ().

#transpose needs dimension1 and dimension2 as attributes to transpose along the specified directions.

t1.transpose(1,0)
tensor([[0.0800, 0.5671, 0.5343],
        [0.4987, 0.2567, 0.8898],
        [0.3337, 0.9441, 0.9503],
        [0.5070, 0.8524, 0.3900]])

Рецепты решалирования могут быть сделаны несколькими способами:

  • T1.Reshape (A, B) вернет новый тензор с теми же данными, что и T1 с размером (A, B). Эта функция копирует данные в другой части памяти, поэтому ее можно считать клоном.
  • T1.RESIZE_ (A, B) Возвращает тот же тензор с другой формой, но некоторые элементы будут удалены из тензора, если новая форма приводит к меньшему количеству элементов, чем исходный тензор. Обратите внимание, что эти элементы не будут удалены из памяти. Однако, если новая форма приводит к большему количеству элементов, чем тензор, эти новые элементы останутся неинициализированными в памяти. Подчеркивание показывает, что метод выполняется на месте.
  • T1.View (A, B) вернет новый тензор с теми же данными, что и T1 с размером (A, B).

Все три метода работают так же.

ty=torch.randn(4,4)
t2=ty.reshape(2,8)
print(t2)
tensor([[-0.1995, -0.5073,  0.0820, -1.7935, -0.1631,  0.2086,  0.5033,  0.3686],
        [ 0.0686,  0.0247, -0.4558, -0.1373,  1.1020,  0.6841,  1.1238, -0.4326]])

Математические операции на тензорах в Петорче

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

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

Дополнение тензора может быть выполнено с использованием torch.add () функция.

t1 = torch.tensor([2,3,4,5])
t2 = torch.tensor([1,5,9,8])

#Adds t1 and t2 and displays the result on console
torch.add(t1,t2)

#Adds t1 to t2 and stores the result in t1
t1.add_(t2)

#Define a new empty tensor
t3=torch.tensor(4)

#Add t1 and t2 and store the result in t3
torch.add(t1,t2, out= t3)

print(t1)
print(t3)
tensor([ 3,  8, 13, 13])
tensor([ 4, 13, 22, 21])

Скалярный может быть добавлен в каждый элемент тензора следующим образом.

torch.add(t1,5)
tensor([8, 13, 18, 18])

Умножение тензоров

Функция Torich.mul () Выполняет разумное умножение из элементами двух тензоров.

torch.mul(t1,t2)
tensor([  3,  40, 117, 104])

Matrix умножение

Матрица и векторное размножение поддерживаются Pytorch, используя Torch.mm (матрица, матрица) и Torch.mv (матрица, вектор) Функции.

#Define a vector
vec = torch.randn(4)

#Define a matrix
mat = torch.randn(3,4)

print(vec)
print(mat)
tensor([ 0.4888,  0.9948, -0.5621, -0.8673])
tensor([[-0.8077,  0.9913, -0.7615, -1.4975],
        [-0.8250,  0.9404,  0.3022, -0.1274],
        [-1.2982,  0.3702,  0.5074,  1.4800]])
torch.mv(mat,vec)
tensor([ 2.3182,  0.4729, -1.8350])

Аналогично, Matrix-Matrix умножение может быть сделано с использованием Torch.mm () функция.

mat1 = torch.tensor([[2,3],[4,5]])
mat2 = torch.tensor([[4,5],[6,7]])
torch.mm(mat1,mat2)
tensor([[26, 31],
        [46, 55]])

Заключение

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