Podstawowe operacje na tensorach w PyTorch

Podstawowe Operacje Na Tensorach W Pytorch



Tensory są podstawą PyTorch, który zapewnia potężną i elastyczną strukturę danych do obliczeń numerycznych w głębokim uczeniu. Podobnie jak tablice NumPy, reprezentują tablice wielowymiarowe, ale z dodatkowymi funkcjami i optymalizacjami zaprojektowanymi specjalnie do zadań głębokiego uczenia się. Ponieważ tensory są głównymi obiektami do przechowywania danych liczbowych i manipulowania nimi w PyTorch, mogą mieć różne wymiary, od skalarów (tensory 0-wymiarowe) po wektory (tensory 1-wymiarowe), macierze (tensory 2-wymiarowe) i wyższe -tensory wymiarowe.

Jedną z największych zalet tensorów jest ich zdolność do wykonywania wydajnych operacji matematycznych. Tensory obsługują szeroki zakres operacji arytmetycznych, w tym operacje na elementach, takie jak dodawanie, odejmowanie, mnożenie i dzielenie, oraz operacje na macierzach, takie jak mnożenie i transpozycja macierzy.

PyTorch zapewnia kompleksowy zestaw funkcji i metod manipulowania tensorami. Obejmują one operacje przekształcania tensorów, wyodrębniania określonych elementów lub podtensorów oraz łączenia lub dzielenia tensorów wzdłuż określonych wymiarów. Dodatkowo PyTorch oferuje funkcje indeksowania, dzielenia i rozpowszechniania tensorów, co ułatwia pracę z tensorami o różnych kształtach i rozmiarach.







W tym artykule nauczymy się podstawowych operacji na tensorach w PyTorch, odkryjemy, jak tworzyć tensory, wykonywać podstawowe operacje, manipulować ich kształtem i przenosić je pomiędzy CPU i GPU.



Tworzenie tensorów

Tensory w PyTorch można tworzyć na kilka sposobów. Przyjrzyjmy się kilku powszechnym metodom.



Do stworzenia tensora możemy wykorzystać klasę „torch.Tensor” lub funkcję „torch.tensor”. Spójrzmy na kilka przykładów:





import latarka

# Stwórz 1 - tensor wymiarowy z listy Pythona
tensor_1d = latarka. napinacz ( [ 1 , 2 , 3 , 4 , 5 ] )
wydrukować ( tensor_1d )

# Stwórz 2 - tensor wymiarowy z zagnieżdżonej listy Pythona
tensor_2d = latarka. napinacz ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
wydrukować ( tensor_2d )

# Utwórz tensor zer o określonym kształcie
zera_tensor = latarka. zera ( 3 , 2 )
wydrukować ( zera_tensor )

# Utwórz tensor jedynek o określonym kształcie
one_tensor = latarka. te ( 2 , 3 )
wydrukować ( one_tensor )

# Utwórz tensor z losowymi wartościami z rozkładu równomiernego
losowy_tensor = latarka. skraj ( 2 , 2 )
wydrukować ( losowy_tensor )

W podanych przykładach tworzymy tensory o różnych kształtach i inicjujemy je różnymi wartościami, takimi jak określone liczby, zera, jedyneki lub wartości losowe. Powinieneś zobaczyć podobny wynik po uruchomieniu poprzedniego fragmentu kodu:



Operacje tensorowe

Kiedy już mamy tensory, możemy wykonywać na nich różne operacje, takie jak operacje arytmetyczne na elementach, operacje na macierzach i inne.

Operacje arytmetyczne na elementach

Operacje arytmetyczne na elementach pozwalają nam wykonywać obliczenia między tensorami element po elemencie. Tensory biorące udział w operacji powinny mieć ten sam kształt.

Oto kilka przykładów:

import latarka

# Utwórz tensory
tensor1 = latarka. napinacz ( [ 1 , 2 , 3 ] )
tensor2 = latarka. napinacz ( [ 4 , 5 , 6 ] )

# Dodatek
dodatek = tensor1 + tensor2
wydrukować ( 'Dodatek:' , dodatek )

# Odejmowanie
odejmowanie = tensor1 - tensor2
wydrukować ( 'Odejmowanie:' , odejmowanie )

# Mnożenie
mnożenie = tensor1 * tensor2
wydrukować ( 'Mnożenie:' , mnożenie )

# Dział
dział = tensor1 / tensor2
wydrukować ( 'Dział:' , dział )

W podanym kodzie wykonujemy operacje dodawania, odejmowania, mnożenia i dzielenia między dwoma tensorami, co skutkuje nowym tensorem z obliczonymi wartościami. Wynik fragmentu kodu jest pokazany w następujący sposób:

Operacje na macierzach

PyTorch zapewnia wydajne operacje na macierzach dla tensorów, takie jak mnożenie i transpozycja macierzy. Operacje te są szczególnie przydatne w przypadku zadań takich jak algebra liniowa i obliczenia sieci neuronowych.

import latarka

# Utwórz tensory
tensor1 = latarka. napinacz ( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
tensor2 = latarka. napinacz ( [ [ 5 , 6 ] , [ 7 , 8 ] ] )

# Mnożenie macierzy
produkt_matrycy = latarka. mata ( tensor1 , tensor2 )
wydrukować ( „Produkt matrycowy:” , produkt_matrycy )

# Transpozycja macierzy
transpozycja_macierzy = tensor1. T
wydrukować ( „Transpozycja macierzy:” , transpozycja_macierzy )

W podanym przykładzie mnożenie macierzy wykonujemy funkcją „torch.matmul”, a transpozycję macierzy uzyskujemy za pomocą atrybutu „.T”.

Manipulacja kształtem tensora

Oprócz wykonywania operacji na tensorach często musimy manipulować ich kształtem, aby dopasować go do określonych wymagań. PyTorch udostępnia kilka funkcji umożliwiających zmianę kształtu tensorów. Przyjrzyjmy się niektórym z tych funkcji:

import latarka

# Utwórz tensor
napinacz = latarka. napinacz ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )

# Zmień kształt tensora
przekształcony_tensor = napinacz. przefasonować ( 3 , 2 )
wydrukować ( „Przekształcony Tensor:” , przekształcony_tensor )

# Uzyskaj rozmiar tensora
rozmiar = napinacz. rozmiar ( )
wydrukować ( „Rozmiar tensora:” , rozmiar )

# Uzyskaj liczbę elementów W tensor
liczba_elementów = napinacz. Podaj imię ( )
wydrukować ( „Liczba elementów:” , liczba_elementów )

W dostarczonym kodzie zmieniamy kształt tensora za pomocą funkcji reshape, pobieramy rozmiar tensora za pomocą metody size i uzyskujemy całkowitą liczbę elementów tensora za pomocą metody numerel.

Przenoszenie tensorów pomiędzy procesorem a kartą graficzną

PyTorch zapewnia obsługę akceleracji GPU, co pozwala nam wykonywać obliczenia na kartach graficznych, co może znacznie przyspieszyć zadania głębokiego uczenia się poprzez skrócenie czasu szkolenia. Tensory pomiędzy CPU i GPU możemy przesuwać metodą „do”.

Notatka : Można to zrobić tylko wtedy, gdy masz na swoim komputerze procesor graficzny NVIDIA z CUDA.

import latarka

# Utwórz tensor na procesorze
tensor_procesor = latarka. napinacz ( [ 1 , 2 , 3 ] )

# Sprawdzać Jeśli Karta graficzna jest dostępna
Jeśli latarka. różny . jest dostępny ( ) :
# Przenieś tensor do GPU
tensor_gpu = tensor_procesor. Do ( 'różny' )
wydrukować ( „Tensor na GPU:” , tensor_gpu )
w przeciwnym razie :
wydrukować ( „GPU nie jest dostępne”. )

W dostarczonym kodzie sprawdzamy dostępność procesora graficznego za pomocą torch.cuda.is_available(). Jeśli procesor graficzny jest dostępny, przenosimy tensor z procesora na procesor graficzny za pomocą metody „to” z argumentem „cuda”.

Wniosek

Zrozumienie podstawowych operacji na tensorach jest kluczowe dla pracy z PyTorch i budowania modeli głębokiego uczenia się. W tym artykule omówiliśmy, jak tworzyć tensory, wykonywać podstawowe operacje, manipulować ich kształtem i przenosić je między procesorem CPU a GPU. Uzbrojeni w tę wiedzę możesz teraz rozpocząć pracę z tensorami w PyTorch, wykonywać obliczenia i budować zaawansowane modele głębokiego uczenia się. Tensory stanowią podstawę reprezentacji i manipulacji danymi w PyTorch, co pozwala uwolnić pełną moc tego wszechstronnego środowiska uczenia maszynowego.