Jednou z největších výhod tenzorů je jejich schopnost provádět efektivní matematické operace. Tenzory podporují širokou škálu aritmetických operací včetně prvkových operací, jako je sčítání, odčítání, násobení a dělení, a maticových operací, jako je násobení matice a transpozice.
PyTorch poskytuje komplexní sadu funkcí a metod pro manipulaci s tenzory. Patří mezi ně operace pro přetváření tenzorů, extrahování specifických prvků nebo sub-tenzorů a zřetězení nebo rozdělení tenzorů podél zadaných rozměrů. PyTorch navíc nabízí funkce pro indexování, krájení a vysílání tenzorů, které usnadňují práci s tenzory různých tvarů a velikostí.
V tomto článku se naučíme základní operace s tenzory v PyTorch, prozkoumáme, jak vytvářet tenzory, provádět základní operace, manipulovat s jejich tvarem a přesouvat je mezi CPU a GPU.
Vytváření tenzorů
Tenzory v PyTorch lze vytvořit několika způsoby. Pojďme prozkoumat některé běžné metody.
K vytvoření tenzoru můžeme použít třídu „torch.Tensor“ nebo funkci „torch.tensor“. Podívejme se na několik příkladů:
import pochodeň
# Vytvořit 1 - rozměrový tenzor ze seznamu Pythonu
tensor_1d = pochodeň. tenzor ( [ 1 , 2 , 3 , 4 , 5 ] )
tisk ( tensor_1d )
# Vytvořit 2 - dimenzionální tenzor z vnořeného seznamu Pythonu
tensor_2d = pochodeň. tenzor ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
tisk ( tensor_2d )
# Vytvořte tenzor nul s konkrétním tvarem
zeros_tensor = pochodeň. nuly ( 3 , 2 )
tisk ( zeros_tensor )
# Vytvořte tenzor jedniček s konkrétním tvarem
one_tensor = pochodeň. jedničky ( 2 , 3 )
tisk ( one_tensor )
# Vytvořte tenzor s náhodnými hodnotami z rovnoměrného rozdělení
random_tensor = pochodeň. rand ( 2 , 2 )
tisk ( random_tensor )
V uvedených příkladech vytváříme tenzory různých tvarů a inicializujeme je různými hodnotami, jako jsou konkrétní čísla, nuly, jedničky nebo náhodné hodnoty. Při spuštění předchozího fragmentu kódu byste měli vidět podobný výstup:
Tenzorové operace
Jakmile máme tenzory, můžeme s nimi provádět různé operace, jako jsou aritmetické operace s prvky, maticové operace a další.
Element-Wise aritmetické operace
Elementové aritmetické operace nám umožňují provádět výpočty mezi tenzory na bázi element po elementu. Tenzory zapojené do operace by měly mít stejný tvar.
Zde jsou nějaké příklady:
import pochodeň# Vytvořte tenzory
tenzor1 = pochodeň. tenzor ( [ 1 , 2 , 3 ] )
tenzor 2 = pochodeň. tenzor ( [ 4 , 5 , 6 ] )
# Přidání
přidání = tenzor1 + tenzor 2
tisk ( 'Přidání:' , přidání )
# Odečítání
odčítání = tenzor1 - tenzor 2
tisk ( 'Odčítání:' , odčítání )
# Násobení
násobení = tenzor1 * tenzor 2
tisk ( 'Násobení:' , násobení )
# Divize
divize = tenzor1 / tenzor 2
tisk ( 'Divize:' , divize )
V daném kódu provádíme operace sčítání, odčítání, násobení a dělení mezi dvěma tenzory, což vede k novému tenzoru s vypočtenými hodnotami. Výsledek fragmentu kódu je zobrazen následovně:
Maticové operace
PyTorch poskytuje efektivní maticové operace pro tenzory, jako je násobení matic a transpozice. Tyto operace jsou zvláště užitečné pro úlohy, jako je lineární algebra a výpočty s neuronovými sítěmi.
import pochodeň# Vytvořte tenzory
tenzor1 = pochodeň. tenzor ( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
tenzor 2 = pochodeň. tenzor ( [ [ 5 , 6 ] , [ 7 , 8 ] ] )
# Maticové násobení
matrix_product = pochodeň. rohož ( tenzor1 , tenzor 2 )
tisk ( 'Matrixový produkt:' , matrix_product )
# Maticová transpozice
matrix_transpose = tenzor1. T
tisk ( 'Matrix Transpose:' , matrix_transpose )
V uvedeném příkladu provedeme násobení matic pomocí funkce „torch.matmul“ a transpozici matice získáme pomocí atributu „.T“.
Manipulace s tvarem tenzoru
Kromě provádění operací na tenzorech často potřebujeme manipulovat s jejich tvarem, aby vyhovoval konkrétním požadavkům. PyTorch poskytuje několik funkcí pro přetvoření tenzorů. Pojďme prozkoumat některé z těchto funkcí:
import pochodeň# Vytvořte tenzor
tenzor = pochodeň. tenzor ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
# Přetvarujte tenzor
přetvořený_tensor = tenzor. přetvořit ( 3 , 2 )
tisk ( 'Přetvarovaný tenzor:' , přetvořený_tensor )
# Získejte velikost tenzoru
velikost = tenzor. velikost ( )
tisk ( 'Velikost tenzoru:' , velikost )
# Získejte počet prvků v tenzor
počet_prvků = tenzor. Dej jméno ( )
tisk ( 'Počet prvků:' , počet_prvků )
V poskytnutém kódu přetváříme tenzor pomocí funkce přetváření, načteme velikost tenzoru pomocí metody velikosti a získáme celkový počet prvků v tenzoru pomocí metody numel.
Pohybující se tenzory mezi CPU a GPU
PyTorch poskytuje podporu pro akceleraci GPU, která nám umožňuje provádět výpočty na grafických kartách, což může výrazně urychlit úkoly hlubokého učení zkrácením doby školení. Tenzory mezi CPU a GPU můžeme přesouvat metodou „to“.
Poznámka : To lze provést pouze v případě, že máte na svém počítači GPU NVIDIA s CUDA.
import pochodeň# Vytvořte tenzor na CPU
tensor_cpu = pochodeň. tenzor ( [ 1 , 2 , 3 ] )
# Šek -li GPU je k dispozici
-li pochodeň. odlišný . je k dispozici ( ) :
# Přesuňte tenzor na GPU
tensor_gpu = tensor_cpu. na ( 'odlišný' )
tisk ( 'Tensor na GPU:' , tensor_gpu )
jiný :
tisk ( 'GPU není k dispozici.' )
V poskytnutém kódu zkontrolujeme, zda je GPU k dispozici pomocí torch.cuda.is_available(). Pokud je k dispozici GPU, přesuneme tenzor z CPU na GPU pomocí metody „to“ s argumentem „cuda“.
Závěr
Pochopení základních tenzorových operací je klíčové pro práci s PyTorchem a vytváření modelů hlubokého učení. V tomto článku jsme prozkoumali, jak vytvářet tenzory, provádět základní operace, manipulovat s jejich tvarem a přesouvat je mezi CPU a GPU. Vyzbrojeni těmito znalostmi můžete nyní začít pracovat s tenzory v PyTorch, provádět výpočty a vytvářet sofistikované modely hlubokého učení. Tenzory slouží jako základ pro reprezentaci dat a manipulaci s nimi v PyTorch, což vám umožní využít plnou sílu tohoto všestranného rámce strojového učení.