Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

PyTorch desde cero, Unidad 3 — Tensores en PyTorch, 3.1 — Estructura y propiedades ·

Broadcasting

Broadcasting: Estructura y Propiedades de Tensores en PyTorch

Introducción

Broadcasting es una característica fundamental en PyTorch que permite a los tensores con dimensiones diferentes operar entre sí como si fueran del mismo tamaño. Esta funcionalidad es especialmente útil para realizar operaciones matemáticas sin necesidad de reajustar las dimensiones de los tensores, lo cual puede ahorrar tiempo y simplificar el código. En este artículo, exploraremos cómo funciona broadcasting en PyTorch, algunos ejemplos prácticos y errores comunes a evitar.

Explicación principal con ejemplos

En PyTorch, broadcasting se utiliza para realizar operaciones matemáticas entre tensores de diferentes tamaños. Cuando dos tensores tienen dimensiones diferentes pero coinciden en todas las dimensiones excepto la más pequeña, el tensor con la dimensión más pequeña se "broadcastea" a la forma del otro tensor.

Ejemplo 1: Suma de un escalar y un tensor

Supongamos que tenemos un tensor de tamaño (2, 3) y queremos sumarle un escalar. Con broadcasting, esto es lo que sucede:

import torch

# Crear un tensor de ejemplo
tensor_2x3 = torch.tensor([[1, 2, 3], [4, 5, 6]])

# Sumar un escalar (3)
result = tensor_2x3 + 3

print(result)

El resultado será:

tensor([[4, 5, 6],
        [7, 8, 9]])

Ejemplo 2: Suma de dos tensores con dimensiones diferentes

Ahora consideremos un tensor de tamaño (2, 3) y otro de tamaño (1, 3):

# Crear un segundo tensor
tensor_1x3 = torch.tensor([[7, 8, 9]])

# Realizar la suma
result = tensor_2x3 + tensor_1x3

print(result)

El resultado será:

tensor([[ 8, 10, 12],
        [11, 13, 15]])

En este ejemplo, el segundo tensor es "broadcasteado" a (2, 3) para poder sumar con el primer tensor.

Ejemplo 3: Suma de dos tensores con diferentes dimensiones

Consideremos un tensor de tamaño (4, 1) y otro de tamaño (4, 5):

# Crear los tensores
tensor_4x1 = torch.tensor([[7], [8], [9], [10]])
tensor_4x5 = torch.tensor([[1, 2, 3, 4, 5] for _ in range(4)])

# Realizar la suma
result = tensor_4x1 + tensor_4x5

print(result)

El resultado será:

tensor([[ 8,  9, 10, 11, 12],
        [ 9, 10, 11, 12, 13],
        [10, 11, 12, 13, 14],
        [11, 12, 13, 14, 15]])

En este caso, el tensor de (4, 1) se "broadcastea" a (4, 5).

Errores típicos / trampas

A pesar de la flexibilidad que ofrece broadcasting, hay varios errores comunes y trampas que pueden surgir:

Error 1: Dimensiones incompatibles

Si dos tensores tienen dimensiones diferentes en más de una dimensión, PyTorch no puede realizar broadcasting. Por ejemplo, si intentamos sumar un tensor (2, 3) con uno (2, 4), obtendremos el siguiente error:

# Intentar sumar tensores incompatibles
tensor_2x3 = torch.tensor([[1, 2, 3], [4, 5, 6]])
tensor_2x4 = torch.tensor([[7, 8, 9, 10]])

result = tensor_2x3 + tensor_2x4

# Esto generará un error

Error 2: Usar broadcasting en operaciones no soportadas

Broadcasting solo se aplica a ciertas operaciones matemáticas. Si intentamos usar broadcasting con una operación que no es compatible, como la división entera (//), obtendremos un error:

# Intentar dividir utilizando broadcasting
tensor_2x3 = torch.tensor([[1, 2, 3], [4, 5, 6]])
result = tensor_2x3 // tensor_2x3

# Esto generará un error

Error 3: Olvidar la dimensión de broadcast

Si olvidamos el tamaño correcto para la dimensión a "broadcastear", podemos obtener resultados inesperados. Por ejemplo, consideremos un tensor (4, 1) y otro (2, 2):

# Crear los tensores
tensor_4x1 = torch.tensor([[7], [8], [9], [10]])
tensor_2x2 = torch.tensor([[1, 2], [3, 4]])

# Intentar sumar sin broadcasting correcto
result = tensor_4x1 + tensor_2x2

# Esto generará un error o resultados inesperados

Checklist accionable

Para asegurarte de que estás utilizando correctamente broadcasting en PyTorch, sigue estos pasos:

  1. Verifica las dimensiones del tensor: Asegúrate de que las dimensiones coincidan en todas las dimensiones excepto la más pequeña.
  2. Utiliza broadcasting solo con operaciones matemáticas soportadas: No aplica a todas las operaciones; verifícalo antes de usarlo.
  3. Comprueba el tamaño resultante: Después de realizar una operación, verifica que el resultado tenga el tamaño esperado.
  4. Ignora las dimensiones adicionales con unsqueeze o expand_as: Si necesitas cambiar la forma del tensor para hacer broadcasting, utiliza estas funciones.
  5. Evita errores de división entera y otros tipos no soportados.

Cierre

Ahora que has aprendido sobre broadcasting en PyTorch, puedes aprovechar esta característica para realizar operaciones matemáticas más eficientemente sin necesidad de reajustar las dimensiones de tus tensores. Sin embargo, recuerda estar atento a los errores comunes y asegurarte de seguir el checklist para usar broadcasting correctamente.

Siguientes pasos

  • Profundiza en operaciones matemáticas con tensores: Aprende más sobre otras operaciones que utilizan broadcasting.
  • Practica con ejemplos reales: Crea tus propios ejemplos y verifica los resultados para asegurarte de entender completamente la funcionalidad.
  • Explora el uso de broadcasting en modelos de Deep Learning: Verifica cómo se aplica en diferentes partes del proceso de entrenamiento y evaluación.

¡Felicitaciones por completar este artículo! Estos conceptos son fundamentales para dominar PyTorch y ser un programador experto.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).