Фундаментални операции с тензори в PyTorch

Fundamentalni Operacii S Tenzori V Pytorch



Тензорите са крайъгълният камък на PyTorch, който осигурява мощна и гъвкава структура от данни за числени изчисления в дълбокото обучение. Подобно на масивите NumPy, те представляват многоизмерни масиви, но с допълнителни функции и оптимизации, които са специално проектирани за задачи за дълбоко обучение. Тъй като тензорите са основните обекти за съхраняване и манипулиране на числените данни в PyTorch, те могат да имат различни измерения, вариращи от скалари (0-измерни тензори) до вектори (1-измерни тензори), матрици (2-измерни тензори) и по-високи -дименсионални тензори.

Едно от най-големите предимства на тензорите е способността им да извършват ефективни математически операции. Тензорите поддържат широк набор от аритметични операции, включително поелементни операции като събиране, изваждане, умножение и деление и матрични операции като матрично умножение и транспониране.

PyTorch предоставя изчерпателен набор от функции и методи за манипулиране на тензорите. Те включват операции за преоформяне на тензорите, извличане на конкретни елементи или под-тензори и свързване или разделяне на тензорите по определени измерения. Освен това PyTorch предлага функционалности за индексиране, нарязване и излъчване на тензори, което улеснява работата с тензори с различни форми и размери.







В тази статия ще научим основните операции с тензори в PyTorch, ще изследваме как да създаваме тензори, да изпълняваме основни операции, да манипулираме формата им и да ги преместваме между CPU и GPU.



Създаване на тензори

Тензорите в PyTorch могат да бъдат създадени по няколко начина. Нека разгледаме някои често срещани методи.



За да създадем тензор, можем да използваме класа “torch.Tensor” или функцията “torch.tensor”. Нека да разгледаме някои примери:





импортиране факла

# Създавам 1 - размерен тензор от списък на Python
тензор_1d = факла. тензор ( [ 1 , 2 , 3 , 4 , 5 ] )
печат ( тензор_1d )

# Създавам 2 - размерен тензор от вложен списък на Python
тензор_2d = факла. тензор ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
печат ( тензор_2d )

# Създайте тензор от нули с определена форма
нулев_тензор = факла. нули ( 3 , 2 )
печат ( нулев_тензор )

# Създайте тензор от единици със специфична форма
ones_tensor = факла. нечий ( 2 , 3 )
печат ( ones_tensor )

# Създайте тензор с произволни стойности от равномерно разпределение
произволен_тензор = факла. ранд ( 2 , 2 )
печат ( произволен_тензор )

В дадените примери създаваме тензори с различни форми и ги инициализираме с различни стойности като конкретни числа, нули, единици или произволни стойности. Трябва да видите подобен резултат, когато стартирате предишния кодов фрагмент:



Тензорни операции

След като имаме тензори, можем да извършваме различни операции върху тях, като аритметични операции по елементи, матрични операции и др.

Елементни аритметични операции

Поелементните аритметични операции ни позволяват да извършваме изчисления между тензорите на база елемент по елемент. Тензорите, включени в операцията, трябва да имат еднаква форма.

Ето няколко примера:

импортиране факла

# Създайте тензори
тензор1 = факла. тензор ( [ 1 , 2 , 3 ] )
тензор2 = факла. тензор ( [ 4 , 5 , 6 ] )

# Добавка
допълнение = тензор1 + тензор2
печат ( 'Добавка:' , допълнение )

# Изваждане
изваждане = тензор1 - тензор2
печат ( 'Изваждане:' , изваждане )

# Умножение
умножение = тензор1 * тензор2
печат ( 'Умножение:' , умножение )

# Разделение
разделение = тензор1 / тензор2
печат ( 'Разделение:' , разделение )

В дадения код извършваме операции за събиране, изваждане, умножение и деление между два тензора, което води до нов тензор с изчислените стойности. Резултатът от кодовия фрагмент е показан, както следва:

Матрични операции

PyTorch предоставя ефективни матрични операции за тензори, като умножение на матрици и транспониране. Тези операции са особено полезни за задачи като линейна алгебра и изчисления с невронни мрежи.

импортиране факла

# Създайте тензори
тензор1 = факла. тензор ( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
тензор2 = факла. тензор ( [ [ 5 , 6 ] , [ 7 , 8 ] ] )

# Матрично умножение
матричен_продукт = факла. постелката ( тензор1 , тензор2 )
печат ( „Matrix Product:“ , матричен_продукт )

# Транспониране на матрица
матрица_транспониране = тензор1. T
печат ( „Транспониране на матрица:“ , матрица_транспониране )

В дадения пример ние извършваме умножението на матрицата с помощта на функцията “torch.matmul” и получаваме транспонирането на матрица с помощта на атрибута “.T”.

Манипулиране на формата на тензор

В допълнение към извършването на операции с тензори, често трябва да манипулираме формата им, за да отговарят на специфични изисквания. PyTorch предоставя няколко функции за преоформяне на тензорите. Нека проучим някои от тези функции:

импортиране факла

# Създайте тензор
тензор = факла. тензор ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )

# Преоформете тензора
преоформен_тензор = тензор. преформатирайте ( 3 , 2 )
печат ( „Преоформен тензор:“ , преоформен_тензор )

# Вземете размера на тензор
размер = тензор. размер ( )
печат ( „Размер на тензора:“ , размер )

# Вземете броя на елементите в тензор
брой_елементи = тензор. дай име ( )
печат ( „Брой елементи:“ , брой_елементи )

В предоставения код преоформяме тензор с помощта на функцията за преоформяне, извличаме размера на тензор с помощта на метода за размер и получаваме общия брой елементи в тензор с помощта на метода numel.

Преместване на тензори между CPU и GPU

PyTorch предоставя поддръжка за GPU ускорение, което ни позволява да извършваме изчисления на графични карти, което може значително да ускори задачите за дълбоко обучение чрез намаляване на времето за обучение. Можем да преместваме тензорите между CPU и GPU с помощта на метода „до“.

Забележка : Това може да се направи само ако имате NVIDIA GPU с CUDA на вашата машина.

импортиране факла

# Създайте тензор на процесора
tensor_cpu = факла. тензор ( [ 1 , 2 , 3 ] )

# Проверка ако GPU е наличен
ако факла. различен . е на разположение ( ) :
# Преместете тензора в GPU
tensor_gpu = tensor_cpu. да се ( 'различен' )
печат ( „Тензор на GPU:“ , tensor_gpu )
друго :
печат ( „GPU не е наличен.“ )

В предоставения код проверяваме дали GPU е наличен с помощта на torch.cuda.is_available(). Ако е наличен графичен процесор, преместваме тензора от процесора към графичния процесор, като използваме метода „до“ с аргумента „cuda“.

Заключение

Разбирането на основните тензорни операции е от решаващо значение за работата с PyTorch и изграждането на модели за дълбоко обучение. В тази статия проучихме как да създаваме тензори, да извършваме основни операции, да манипулираме формата им и да ги преместваме между CPU и GPU. Въоръжени с тези знания, вече можете да започнете да работите с тензори в PyTorch, да извършвате изчисления и да изграждате сложни модели за дълбоко обучение. Тензорите служат като основа за представяне и манипулиране на данни в PyTorch, което ви позволява да разгърнете пълната мощ на тази многостранна рамка за машинно обучение.