No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Conversión y operación de tensores con PyTorch

6/24
Recursos

Aportes 5

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Hace mucho vi como un video con respecto a esto y quiero compartirselos, habla de las operaciones de tensores y las reglas que es tiene y lo explica de una manera muy directa y sencilla.

VIDEO

Hola,
Quiero compartirles 2 cosas. La primera que los tensores también se pueden multiplicar por medio del comando @. Por ejemplo: matriz1@matriz2 nos da el mismo resultado que torch.matmul(matriz1,matriz2).
También me gustaría compartirles un sitio web donde se desarrolla paso a paso la multiplicación de matrices. Puedes ingresar los valores que desees y paso a paso observarás el resultado: matrixmultiplication.xyz (la plataforma no me deja ingresar el link porque no contiene el cerficado https pero pueden copiar y pegar).

Para quienes tengan problemas con los temas vistos en esta clase les recomiendo este par de cursos donde se profundiza mas en el tema:

La \*\*conversión\*\* y \*\*operación\*\* de tensores en PyTorch es esencial para manipular y procesar datos de manera eficiente. A continuación, te explico los conceptos clave y cómo realizar estas tareas. \### 1. \*\*Creación de Tensores\*\* En PyTorch, los tensores son similares a los arrays de NumPy, pero con la ventaja de que pueden ser utilizados en GPU para realizar cálculos más rápidos. ```python import torch \# Crear un tensor vacío tensor\_vacio = torch.empty(3, 4) # Crea un tensor vacío de 3x4 \# Crear un tensor con ceros tensor\_ceros = torch.zeros(3, 4) # Tensor de 3x4 lleno de ceros \# Crear un tensor con unos tensor\_unos = torch.ones(3, 4) # Tensor de 3x4 lleno de unos \# Crear un tensor con valores aleatorios tensor\_aleatorio = torch.rand(3, 4) # Valores aleatorios en \[0, 1) ``` \### 2. \*\*Conversiones entre Tensores y NumPy\*\* Los tensores de PyTorch pueden convertirse fácilmente en arrays de NumPy y viceversa. Esto es útil cuando ya tienes código que utiliza NumPy y quieres aprovechar PyTorch. \- \*\*De Tensor a NumPy:\*\* ```python tensor = torch.rand(3, 3) array\_numpy = tensor.numpy() print(array\_numpy) # Conversión de tensor a array NumPy ``` \- \*\*De NumPy a Tensor:\*\* ```python import numpy as np array\_numpy = np.array(\[\[1, 2], \[3, 4]]) tensor = torch.from\_numpy(array\_numpy) print(tensor) # Conversión de array NumPy a tensor PyTorch ``` \### 3. \*\*Operaciones con Tensores\*\* PyTorch permite realizar operaciones matemáticas con tensores, similares a las que se pueden hacer con arrays de NumPy. \- \*\*Suma de Tensores:\*\* ```python x = torch.rand(2, 3) y = torch.rand(2, 3) suma = x + y # Suma elemento por elemento print(suma) ``` \- \*\*Multiplicación Elemento por Elemento (Hadamard):\*\* ```python mult\_elemento = x \* y print(mult\_elemento) ``` \- \*\*Producto Matricial (Producto Punto):\*\* ```python x = torch.rand(3, 2) y = torch.rand(2, 4) producto\_matriz = torch.matmul(x, y) # Producto matricial print(producto\_matriz) ``` \### 4. \*\*Modificación del Tipo de Datos (`dtype`)\*\* Los tensores en PyTorch pueden ser de varios tipos, como `float32`, `int64`, etc. Puedes convertir el tipo de un tensor usando el método `to()` o cambiando el `dtype` directamente. \- \*\*Especificar el Tipo de Dato al Crear el Tensor:\*\* ```python tensor\_flotante = torch.ones(3, 3, dtype=torch.float32) ``` \- \*\*Convertir el Tipo de Dato Después de Crear el Tensor:\*\* ```python tensor = torch.rand(3, 3) tensor\_entero = tensor.to(torch.int32) # Convertir a enteros ``` \### 5. \*\*Mover Tensores entre CPU y GPU\*\* PyTorch soporta operaciones en GPU, lo cual acelera significativamente los cálculos. Puedes mover tensores entre CPU y GPU con `.to()`. \- \*\*Mover un Tensor a la GPU:\*\* ```python if torch.cuda.is\_available(): tensor\_gpu = tensor.to('cuda') print(tensor\_gpu.device) # Verifica que el tensor esté en la GPU ``` \- \*\*Mover un Tensor de la GPU a la CPU:\*\* ```python tensor\_cpu = tensor\_gpu.to('cpu') ``` \### 6. \*\*Operaciones de Redimensionado y Transposición\*\* A veces necesitas cambiar la forma de un tensor o reordenar sus dimensiones. Estas operaciones son muy comunes en procesamiento de datos. \- \*\*Cambiar la Forma (`view`):\*\* ```python tensor = torch.rand(4, 4) tensor\_reshaped = tensor.view(2, 8) # Redimensionar a 2x8 print(tensor\_reshaped.shape) # Verifica la nueva forma ``` \- \*\*Transponer un Tensor (`transpose`):\*\* ```python tensor = torch.rand(2, 3) tensor\_transpose = torch.transpose(tensor, 0, 1) # Intercambia las dimensiones 0 y 1 print(tensor\_transpose.shape) # Verifica la forma después de transponer ``` \### 7. \*\*Operaciones de Agregación\*\* Puedes calcular estadísticas como sumas, medias, mínimos y máximos a lo largo de un eje del tensor. \- \*\*Suma de Todos los Elementos:\*\* ```python tensor = torch.rand(3, 3) suma\_total = tensor.sum() print(suma\_total) # Imprime la suma de todos los elementos del tensor ``` \- \*\*Media por Ejes Específicos:\*\* ```python media\_filas = tensor.mean(dim=1) # Media a lo largo de las filas (dimensión 1) print(media\_filas) ``` \### 8. \*\*Operaciones de Corte e Indexado\*\* Al igual que con los arrays de NumPy, puedes acceder a subconjuntos de un tensor o modificar partes específicas de él. \- \*\*Acceder a un Elemento:\*\* ```python tensor = torch.rand(4, 4) print(tensor\[1, 2]) # Acceder al elemento en la fila 1, columna 2 ``` \- \*\*Modificar un Elemento:\*\* ```python tensor\[1, 2] = 10 # Asignar un valor al elemento en la fila 1, columna 2 ``` \- \*\*Cortar Tensores:\*\* ```python tensor\_slice = tensor\[:, 1] # Seleccionar la segunda columna de todas las filas ``` \### 9. \*\*Operaciones de Concatenación\*\* Puedes unir varios tensores a lo largo de un eje específico. \- \*\*Concatenar Tensores:\*\* ```python tensor\_a = torch.rand(2, 3) tensor\_b = torch.rand(2, 3) tensor\_concat = torch.cat((tensor\_a, tensor\_b), dim=0) # Concatenar a lo largo de las filas print(tensor\_concat) ``` \### 10. \*\*Operaciones de Comparación\*\* Puedes comparar tensores para obtener un tensor booleano (True/False) en cada posición. \- \*\*Comparar Elementos:\*\* ```python tensor = torch.rand(2, 3) comparacion = tensor > 0.5 # Comparar si los elementos son mayores que 0.5 print(comparacion) ``` \### Conclusión PyTorch ofrece una gran flexibilidad para trabajar con tensores y realizar operaciones numéricas de manera eficiente. Las operaciones de conversión entre NumPy y PyTorch, junto con la posibilidad de mover tensores entre CPU y GPU, permiten un flujo de trabajo robusto y acelerado para el desarrollo de modelos de aprendizaje profundo y otras tareas.
■ Resumen: * **Operaciones Elemento a Elemento**: Operaciones como suma, resta, multiplicación y división entre tensores se realizan de forma "element-wise", es decir, se aplican a cada par de elementos correspondientes de los tensores involucrados. Por ejemplo, si A y B son tensores, entonces `C = A + B` sumará cada elemento de A con el elemento correspondiente en B. * **Compatibilidad de Dimensiones y Broadcasting**: Para que las operaciones elemento a elemento funcionen, las dimensiones de los tensores deben ser iguales o compatibles a través de broadcasting. Broadcasting extiende las dimensiones de uno o ambos tensores para que sus formas sean compatibles sin copiar datos innecesarios. Por ejemplo, sumar un tensor de forma (3, 1) con uno de forma (3, 4) aplicará broadcasting al primer tensor para que se comporte como si tuviera la forma (3, 4). * **Conversión de NumPy a PyTorch**: La función `torch.from\_numpy(array)` convierte un array de NumPy a un tensor de PyTorch, manteniendo los datos subyacentes sin copiarlos. Esto es especialmente útil cuando se trabaja con datasets en NumPy y se necesita usar las capacidades de PyTorch para entrenamiento y modelado.