Operações fundamentais com tensores em PyTorch

Operacoes Fundamentais Com Tensores Em Pytorch



Tensores são a base do PyTorch, que fornece uma estrutura de dados poderosa e flexível para cálculos numéricos em aprendizado profundo. Assim como os arrays NumPy, eles representam arrays multidimensionais, mas com recursos e otimizações adicionais projetados especificamente para tarefas de aprendizado profundo. Como os tensores são os objetos principais para armazenar e manipular os dados numéricos no PyTorch, eles podem ter dimensões diferentes, variando de escalares (tensores 0-dimensionais) a vetores (tensores unidimensionais), matrizes (tensores bidimensionais) e superiores. tensores -dimensionais.

Uma das maiores vantagens dos tensores é a capacidade de realizar operações matemáticas eficientes. Os tensores suportam uma ampla gama de operações aritméticas, incluindo operações elementares, como adição, subtração, multiplicação e divisão, e operações matriciais, como multiplicação e transposição de matrizes.

PyTorch fornece um conjunto abrangente de funções e métodos para manipular os tensores. Isso inclui operações para remodelar os tensores, extrair elementos ou subtensores específicos e concatenar ou dividir os tensores ao longo de dimensões especificadas. Além disso, PyTorch oferece funcionalidades de indexação, fatiamento e transmissão de tensores que facilitam o trabalho com tensores de diferentes formatos e tamanhos.







Neste artigo, aprenderemos as operações fundamentais com tensores no PyTorch, exploraremos como criar tensores, realizar operações básicas, manipular sua forma e movê-los entre CPU e GPU.



Criando Tensores

Os tensores no PyTorch podem ser criados de várias maneiras. Vamos explorar alguns métodos comuns.



Para criar um tensor, podemos usar a classe “torch.Tensor” ou a função “torch.tensor”. Vejamos alguns exemplos:





importar tocha

# Criar uma 1 - tensor dimensional de uma lista Python
tensor_1d = tocha. tensor ( [ 1 , 2 , 3 , 4 , 5 ] )
imprimir ( tensor_1d )

# Criar uma 2 - tensor dimensional de uma lista Python aninhada
tensor_2d = tocha. tensor ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
imprimir ( tensor_2d )

# Cria um tensor de zeros com uma forma específica
zeros_tensor = tocha. zeros ( 3 , 2 )
imprimir ( zeros_tensor )

# Crie um tensor com formato específico
uns_tensor = tocha. uns ( 2 , 3 )
imprimir ( uns_tensor )

# Cria um tensor com valores aleatórios a partir de uma distribuição uniforme
tensor_aleatório = tocha. Rand ( 2 , 2 )
imprimir ( tensor_aleatório )

Nos exemplos dados, criamos tensores de diferentes formatos e os inicializamos com vários valores, como números específicos, zeros, uns ou valores aleatórios. Você deverá ver uma saída semelhante ao executar o trecho de código anterior:



Operações de tensor

Assim que tivermos tensores, podemos realizar várias operações neles, como operações aritméticas elemento a elemento, operações matriciais e muito mais.

Operações aritméticas elementares

As operações aritméticas elemento a elemento nos permitem realizar cálculos entre tensores elemento por elemento. Os tensores envolvidos na operação devem ter o mesmo formato.

aqui estão alguns exemplos:

importar tocha

# Cria tensores
tensor1 = tocha. tensor ( [ 1 , 2 , 3 ] )
tensor2 = tocha. tensor ( [ 4 , 5 , 6 ] )

# Adição
Adição = tensor1 + tensor2
imprimir ( 'Adição:' , Adição )

# Subtração
subtração = tensor1 - tensor2
imprimir ( 'Subtração:' , subtração )

# Multiplicação
multiplicação = tensor1 * tensor2
imprimir ( 'Multiplicação:' , multiplicação )

# Divisão
divisão = tensor1 / tensor2
imprimir ( 'Divisão:' , divisão )

No código fornecido, realizamos as operações de adição, subtração, multiplicação e divisão entre dois tensores que resulta em um novo tensor com os valores calculados. O resultado do trecho de código é mostrado a seguir:

Operações de Matriz

PyTorch fornece operações matriciais eficientes para tensores, como multiplicação e transposição de matrizes. Essas operações são particularmente úteis para tarefas como álgebra linear e cálculos de redes neurais.

importar tocha

# Cria tensores
tensor1 = tocha. tensor ( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
tensor2 = tocha. tensor ( [ [ 5 , 6 ] , [ 7 , 8 ] ] )

# Multiplicação da matriz
produto_matriz = tocha. o tapete ( tensor1 , tensor2 )
imprimir ( 'Produto Matriz:' , produto_matriz )

# Transposição de matriz
matriz_transposição = tensor1. T
imprimir ( 'Transposição de Matriz:' , matriz_transposição )

No exemplo dado, realizamos a multiplicação da matriz utilizando a função “torch.matmul” e obtemos a transposta de uma matriz utilizando o atributo “.T”.

Manipulação de forma de tensor

Além de realizar operações em tensores, muitas vezes precisamos manipular sua forma para atender a requisitos específicos. PyTorch fornece várias funções para remodelar os tensores. Vamos explorar algumas dessas funções:

importar tocha

#Crie um tensor
tensor = tocha. tensor ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )

#Remodelar o tensor
remodelado_tensor = tensor. remodelar ( 3 , 2 )
imprimir ( 'Tensor remodelado:' , remodelado_tensor )

# Obtenha o tamanho de um tensor
tamanho = tensor. tamanho ( )
imprimir ( 'Tamanho do Tensor:' , tamanho )

# Obtenha o número de elementos em um tensor
num_elementos = tensor. dar nome ( )
imprimir ( 'Número de elementos:' , num_elementos )

No código fornecido, remodelamos um tensor usando a função reshape, recuperamos o tamanho de um tensor usando o método size e obtemos o número total de elementos em um tensor usando o método numel.

Movendo tensores entre CPU e GPU

PyTorch fornece suporte para aceleração de GPU, o que nos permite realizar cálculos em placas gráficas que podem acelerar significativamente as tarefas de aprendizado profundo, reduzindo os tempos de treinamento. Podemos mover os tensores entre a CPU e a GPU usando o método “to”.

Observação : Isso só pode ser feito se você tiver uma GPU NVIDIA com CUDA em sua máquina.

importar tocha

# Criando um tensor na CPU
tensor_cpu = tocha. tensor ( [ 1 , 2 , 3 ] )

# Verificar se GPU está disponível
se tocha. diferente . está disponível ( ) :
# Mova o tensor para GPU
tensor_gpu = tensor_cpu. para ( 'diferente' )
imprimir ( 'Tensor na GPU:' , tensor_gpu )
outro :
imprimir ( 'GPU não disponível.' )

No código fornecido, verificamos se uma GPU está disponível usando torch.cuda.is_available(). Se uma GPU estiver disponível, movemos o tensor da CPU para a GPU usando o método “to” com o argumento “cuda”.

Conclusão

Compreender as operações fundamentais do tensor é crucial para trabalhar com PyTorch e construir modelos de aprendizado profundo. Neste artigo, exploramos como criar tensores, realizar operações básicas, manipular sua forma e movê-los entre CPU e GPU. Armado com esse conhecimento, agora você pode começar a trabalhar com tensores no PyTorch, realizar cálculos e construir modelos sofisticados de aprendizado profundo. Os tensores servem como base para a representação e manipulação de dados no PyTorch, o que permite que você libere todo o poder desta versátil estrutura de aprendizado de máquina.