Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

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

Shapes y dtypes

Shapes y dtypes

Introducción

En la programación de Deep Learning, los tensores son una estructura fundamental para representar datos. La comprensión de las dimensiones (shapes) y los tipos de datos (dtypes) es crucial para el correcto manejo de estos tensores en PyTorch. Este artículo se centra en estas dos propiedades esenciales, proporcionando ejemplos prácticos y consejos valiosos.

Explicación principal con ejemplos

En PyTorch, los tensores son estructuras multidimensionales que pueden tener una gran variedad de shapes. La dimensión o forma se define a través del número de elementos en cada dimensión. Por ejemplo:

import torch

# Crear un tensor 1D
tensor_1d = torch.tensor([1, 2, 3])
print("Shape:", tensor_1d.shape)  # Output: Shape: torch.Size([3])

# Crear un tensor 2D
tensor_2d = torch.tensor([[1, 2], [3, 4]])
print("Shape:", tensor_2d.shape)  # Output: Shape: torch.Size([2, 2])

Los tipos de datos (dtypes) son importantes porque determinan el tipo específico del dato que un tensor puede almacenar. En PyTorch, los dtypes más comunes incluyen torch.int, torch.float32, y torch.double. Por ejemplo:

# Crear tensores con diferentes dtypes
tensor_int = torch.tensor([1, 2, 3], dtype=torch.int)
print("dtype:", tensor_int.dtype)  # Output: dtype: torch.int

tensor_float = torch.tensor([1.0, 2.0, 3.0])
print("dtype:", tensor_float.dtype)  # Output: dtype: torch.float32

Errores típicos / trampas

A continuación, se presentan algunos errores comunes y posibles trampas que los desarrolladores pueden enfrentar al trabajar con shapes y dtypes:

  1. Operaciones incompatibles de shape:
   # Error: ValueError - Incompatible shapes for broadcasting
   tensor_1 = torch.tensor([1, 2])
   tensor_2 = torch.tensor([3, 4, 5])
   result = tensor_1 + tensor_2  # Esto generará un error
  1. Tipo de dato incompatibles:
   # Error: TypeError - Incompatible dtypes for operations
   int_tensor = torch.tensor([1, 2], dtype=torch.int)
   float_tensor = torch.tensor([3.0, 4.0])
   result = int_tensor + float_tensor  # Esto generará un error
  1. Perdida de precisión:
   # Perdida de precisión al convertir floats a ints
   tensor_float = torch.tensor([1.5, 2.0, 3.7])
   int_tensor = tensor_float.to(torch.int)  # Esto truncará los valores
   print(int_tensor)

Checklist accionable

Para asegurar un manejo correcto de shapes y dtypes en PyTorch:

  1. Verifica el shape del tensor antes de realizar operaciones:
   assert tensor.shape == (expected_shape,), "Shape no coincide"
  1. Convierte los tensores a tipos compatibles antes de realizar operaciones:
   if tensor.dtype != other_tensor.dtype:
       tensor = tensor.to(other_tensor.dtype)
  1. Usa torch.broadcast_tensors() para operaciones que requieren shapes compatibles:
   tensors = torch.broadcast_tensors(tensor1, tensor2)
  1. Conoce los dtypes comunes y asegúrate de usar el correcto en tu aplicación:
  • int: Para enteros.
  • float32 (o torch.float): Para flotantes de 32 bits, comúnmente utilizado para entrenamiento de modelos.
  1. Utiliza .to() para convertir dtypes según sea necesario:
   tensor = tensor.to(dtype=torch.float)
  1. Verifica la compatibilidad del shape al cargar datos:
  • Asegúrate de que los datasets estén correctamente formados.
  • Usa preprocesamiento adecuado para ajustar las shapes.

Cierre con "Siguientes pasos"

Siguientes pasos

  1. Explicaciones adicionales: Explora la documentación oficial de PyTorch para una comprensión más detallada sobre dtypes y shapes.
  2. Práctica adicional: Trabaja en varios proyectos que requieran un manejo estricto de shapes y dtypes.
  3. Comprender mejor la lógica de broadcasting: Esto te ayudará a entender cómo los shapes se ajustan en operaciones entre tensores.
  4. Usar herramientas de depuración: Familiarízate con herramientas como torch.autograd para diagnosticar problemas relacionados con shapes y dtypes.

Al comprender y dominar las propiedades de shape y dtype, podrás trabajar eficazmente en proyectos de Deep Learning que requieren un manejo preciso de datos.

Contacto

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