Trabajar con tensores en PyTorch implica vigilar tres factores que determinan si tu código corre o explota en errores: la forma, el tipo de dato y el device donde vive el tensor. Si dominas estos tres, te ahorras horas de debugueo en proyectos de machine learning y deep learning.
Esta guía te muestra cómo inspeccionar y modificar cada uno desde Google Colab, con ejemplos directos del flujo de trabajo en PyTorch.
¿Cómo inspeccionar la forma y dimensiones de un tensor?
La forma de un tensor te dice cuántas dimensiones tiene y cuántos elementos hay en cada una. En PyTorch usas el atributo shape para obtener un objeto torch.size con esa información [01:30].
Por ejemplo, una matriz 2x2 devuelve torch.Size([2, 2]), mientras que un tensor T5 con forma 5x2x3 indica tres dimensiones: cinco grados en la primera, dos en la segunda y tres en la tercera.
También puedes consultar solo el número de dimensiones con el atributo ndim, aunque shape te da más contexto en una sola llamada.
¿Qué diferencia hay entre shape y ndim en PyTorch? shape te devuelve el tamaño de cada dimensión, mientras que ndim solo devuelve un entero con la cantidad total de dimensiones. shape es más informativo para debuguear.
¿Qué tipos de datos puede tener un tensor en PyTorch?
Cada tensor tiene un dtype que define la precisión de sus valores. El default cuando creas un tensor con decimales es torch.float32, también conocido como torch.float [03:30].
Estos son los tipos más usados que encontrarás en la documentación de PyTorch:
torch.float32 o torch.float: punto flotante de 32 bits, el estándar.
torch.float64 o torch.double: punto flotante de 64 bits, mayor precisión.
torch.bool: valores booleanos verdadero o falso.
torch.int8: enteros firmados, positivos y negativos.
torch.uint8: enteros sin firmar, solo positivos.
La cantidad de bits define la precisión: más bits significan más exactitud, pero también más consumo de memoria. Cuando trabajas con un GPU pequeño como el de Colab, float32 es el balance ideal entre precisión y rendimiento.
¿Qué pasa cuando sumas tensores de tipos distintos?
PyTorch toma una decisión automática sobre el tipo del resultado. Si sumas una matriz float32 con una int64, el resultado se convierte a float32, porque PyTorch detecta cuál es el formato más óptimo para conservar la información [05:50].
¿Cómo cambio el tipo de un tensor manualmente?
Usa la función to, que recibe el argumento dtype. Por ejemplo, para convertir una matriz de enteros a flotantes escribes matriz.to(torch.float). Verás cómo cada número aparece con su punto decimal, señal de que ya es float32.
Esta función la vas a usar muchas veces, así que vale la pena memorizarla.
¿Por qué importa el device donde corre tu tensor?
El device es el hardware donde se ejecuta el tensor: puede ser CPU o GPU. Dos tensores solo pueden operar entre sí si están en el mismo dispositivo, y aquí es donde aparecen muchos errores [07:30].
Para consultar el device de un tensor usas el atributo device. Por defecto, los tensores se crean en CPU.
¿Qué es CUDA y cómo lo activo?
CUDA es la plataforma de computación de NVIDIA que permite usar el poder de los GPUs para acelerar operaciones entre tensores, sobre todo la multiplicación de matrices. Es esencial para el entrenamiento y la inferencia en machine learning.
Antes de mover un tensor a GPU, verifica si CUDA está disponible:
python
torch.cuda.is_available()
Si devuelve True, puedes mover tu tensor con la función to:
python
matriz_cuda = matriz.to(torch.device('cuda'))
Lo interesante es que to sirve para dos cosas a la vez: cambia el device y el tipo en una sola línea. Por ejemplo, puedes mover un tensor de CUDA a CPU y, al mismo tiempo, convertirlo de int64 a float32 en un solo comando [10:00].
¿Qué significa cuda:0 en PyTorch? Es el GPU número cero de tu sistema. Si tuvieras cinco GPUs, se numerarían de cero a cuatro. PyTorch empieza el conteo desde cero.
¿Qué error sale cuando los tensores están en devices diferentes?
Si intentas sumar un tensor que vive en CUDA con otro que está en CPU, PyTorch lanza un error claro: expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu [11:30].
La solución es simple: mueve ambos tensores al mismo device antes de operar. Aprender a leer estos errores te ahorra mucho tiempo cuando entrenas modelos.
Los tres factores (shape, dtype y device) son la causa de la mayoría de bugs cuando empiezas con PyTorch. Tenerlos siempre presentes hace que tu código sea más predecible y fácil de depurar.
¿Has tenido errores de device mismatch al entrenar tus modelos? Cuéntame en los comentarios cómo los resolviste.