Operaciones fundamentales con tensores en PyTorch

Operaciones Fundamentales Con Tensores En Pytorch



Los tensores son la piedra angular de PyTorch, que proporciona una estructura de datos potente y flexible para cálculos numéricos en aprendizaje profundo. Al igual que las matrices NumPy, representan matrices multidimensionales pero con características y optimizaciones adicionales diseñadas específicamente para tareas de aprendizaje profundo. Dado que los tensores son los objetos principales para almacenar y manipular los datos numéricos en PyTorch, pueden tener diferentes dimensiones, desde escalares (tensores de 0 dimensiones) hasta vectores (tensores de 1 dimensión), matrices (tensores de 2 dimensiones) y superiores. -tensores dimensionales.

Una de las mayores ventajas de los tensores es su capacidad para realizar operaciones matemáticas eficientes. Los tensores admiten una amplia gama de operaciones aritméticas, incluidas operaciones de elementos como suma, resta, multiplicación y división y operaciones matriciales como multiplicación y transposición de matrices.

PyTorch proporciona un conjunto completo de funciones y métodos para manipular los tensores. Estas incluyen operaciones para remodelar los tensores, extraer elementos o subtensores específicos y concatenar o dividir los tensores a lo largo de dimensiones específicas. Además, PyTorch ofrece funcionalidades para indexar, dividir y transmitir tensores que facilitan el trabajo con tensores de diferentes formas y tamaños.







En este artículo, aprenderemos las operaciones fundamentales con tensores en PyTorch, exploraremos cómo crear tensores, realizar operaciones básicas, manipular su forma y moverlos entre CPU y GPU.



Creando tensores

Los tensores en PyTorch se pueden crear de varias maneras. Exploremos algunos métodos comunes.



Para crear un tensor, podemos usar la clase “torch.Tensor” o la función “torch.tensor”. Veamos algunos ejemplos:





importar antorcha

# Crear un 1 - tensor dimensional de una lista de Python
tensor_1d = antorcha. tensor ( [ 1 , 2 , 3 , 4 , 5 ] )
imprimir ( tensor_1d )

# Crear un 2 - tensor dimensional de una lista de Python anidada
tensor_2d = antorcha. tensor ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
imprimir ( tensor_2d )

# Crea un tensor de ceros con una forma específica
tensor_ceros = antorcha. ceros ( 3 , 2 )
imprimir ( tensor_ceros )

# Crea un tensor de unos con una forma específica
tensor_unos = antorcha. unos ( 2 , 3 )
imprimir ( tensor_unos )

# Crea un tensor con valores aleatorios a partir de una distribución uniforme
tensor_aleatorio = antorcha. rand ( 2 , 2 )
imprimir ( tensor_aleatorio )

En los ejemplos dados, creamos tensores de diferentes formas y los inicializamos con varios valores, como números específicos, ceros, unos o valores aleatorios. Deberías ver un resultado similar cuando ejecutes el fragmento de código anterior:



Operaciones tensoriales

Una vez que tenemos tensores, podemos realizar varias operaciones sobre ellos, como operaciones aritméticas de elementos, operaciones matriciales y más.

Operaciones aritméticas por elementos

Las operaciones aritméticas por elementos nos permiten realizar cálculos entre tensores elemento por elemento. Los tensores que intervienen en la operación deben tener la misma forma.

Aquí hay unos ejemplos:

importar antorcha

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

# Suma
suma = tensor1 + tensor2
imprimir ( 'Suma:' , suma )

# Resta
sustracción = tensor1 - tensor2
imprimir ( 'Sustracción:' , sustracción )

# Multiplicación
multiplicación = tensor1 * tensor2
imprimir ( 'Multiplicación:' , multiplicación )

# División
división = tensor1 / tensor2
imprimir ( 'División:' , división )

En el código dado, realizamos operaciones de suma, resta, multiplicación y división entre dos tensores, lo que da como resultado un nuevo tensor con los valores calculados. El resultado del fragmento de código se muestra a continuación:

Operaciones matriciales

PyTorch proporciona operaciones matriciales eficientes para tensores, como la multiplicación y transposición de matrices. Estas operaciones son particularmente útiles para tareas como álgebra lineal y cálculos de redes neuronales.

importar antorcha

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

# Multiplicación de matrices
producto_matriz = antorcha. la estera ( tensor1 , tensor2 )
imprimir ( 'Producto de matriz:' , producto_matriz )

# Transposición de matriz
transposición_matriz = tensor1. t
imprimir ( 'Transposición de matriz:' , transposición_matriz )

En el ejemplo dado, realizamos la multiplicación de matrices usando la función 'torch.matmul' y obtenemos la transpuesta de una matriz usando el atributo '.T'.

Manipulación de la forma del tensor

Además de realizar operaciones con tensores, a menudo necesitamos manipular su forma para que se ajuste a requisitos específicos. PyTorch proporciona varias funciones para remodelar los tensores. Exploremos algunas de estas funciones:

importar antorcha

# Crea un tensor
tensor = antorcha. tensor ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )

# Reformar el tensor
tensor_reformado = tensor. remodelar ( 3 , 2 )
imprimir ( 'Tensor remodelado:' , tensor_reformado )

# Obtener el tamaño de un tensor
tamaño = tensor. tamaño ( )
imprimir ( 'Tamaño del tensor:' , tamaño )

# Obtener el número de elementos. en un tensor
núm_elementos = tensor. dar nombre ( )
imprimir ( 'Número de elementos:' , núm_elementos )

En el código proporcionado, remodelamos un tensor usando la función de remodelación, recuperamos el tamaño de un tensor usando el método de tamaño y obtenemos el número total de elementos en un tensor usando el método numel.

Mover tensores entre CPU y GPU

PyTorch brinda soporte para la aceleración de GPU, lo que nos permite realizar cálculos en tarjetas gráficas que pueden acelerar significativamente las tareas de aprendizaje profundo al reducir los tiempos de entrenamiento. Podemos mover los tensores entre la CPU y la GPU usando el método “to”.

Nota : Esto sólo se puede hacer si tienes una GPU NVIDIA con CUDA en tu máquina.

importar antorcha

# Crea un tensor en la CPU
tensor_cpu = antorcha. tensor ( [ 1 , 2 , 3 ] )

# Controlar si GPU está disponible
si antorcha. diferente . está disponible ( ) :
# Mover el tensor a GPU
tensor_gpu = tensor_cpu. a ( 'diferente' )
imprimir ( 'Tensor en GPU:' , tensor_gpu )
demás :
imprimir ( 'GPU no disponible'. )

En el código proporcionado, verificamos si hay una GPU disponible usando torch.cuda.is_available(). Si hay una GPU disponible, movemos el tensor de la CPU a la GPU usando el método 'to' con el argumento 'cuda'.

Conclusión

Comprender las operaciones tensoriales fundamentales es crucial para trabajar con PyTorch y construir modelos de aprendizaje profundo. En este artículo, exploramos cómo crear tensores, realizar operaciones básicas, manipular su forma y moverlos entre CPU y GPU. Armado con este conocimiento, ahora puede comenzar a trabajar con tensores en PyTorch, realizar cálculos y crear modelos sofisticados de aprendizaje profundo. Los tensores sirven como base para la representación y manipulación de datos en PyTorch, lo que le permite liberar todo el poder de este marco versátil de aprendizaje automático.