Creación y uso de Data Loaders en PyTorch
Clase 14 de 24 • Curso de Redes Neuronales con PyTorch
Resumen
¿Qué es un Data Loader y cuál es su función en PyTorch?
Los Data Loaders en PyTorch son herramientas esenciales para el procesamiento eficiente de grandes conjuntos de datos. Estos permiten dividir datasets extensos en pequeños lotes llamados "batches". Esta estrategia no solo optimiza el uso de la memoria, sino que también faciilta el paralelismo a través de múltiples GPUs, si es necesario. Al dividir el dataset, los Data Loaders permiten que el entrenamiento de modelos sea más manejable y escalable.
¿Cómo se define un Data Loader en PyTorch?
Para definir un Data Loader en PyTorch, se requieren importar ciertas librerías y planificar varios pasos. A continuación, se expone cómo proceder:
-
Importación de la librería:
from torch.utils.data import DataLoader
Esto permite el acceso al objeto
DataLoader
para su uso posterior. -
Definición del dataset: Se utiliza un dataset de entrenamiento, en este caso un iterador llamado
trainIter
del dataset DBpedia, especificando su uso para el set de entrenamiento:trainIter = DBpedia(split='train')
-
Creación del Data Loader: Aquí se establece el tamaño del lote, se elige si se quiere aleatorizar la secuencia de los datos (shuffling) y se selecciona una función
collate
:data_loader = DataLoader(dataset=trainIter, batch_size=8, shuffle=False, collate_fn=collateBatch)
¿Cómo definimos una función collate
para recopilar los datos?
La función collate
, denominada aquí collateBatch
, es crucial para combinar los datos de los lotes. Esta función permite agrupar diferentes elementos del dataset en un único tensor manejable. A continuación se explica cómo implementarla:
-
Configuración del dispositivo: Determina si se usará CPU o GPU (CUDA) según la disponibilidad.
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
-
Definición de
collateBatch
: Desarrollar una funcióncollateBatch
para procesar cada lote.def collateBatch(batch): label_list, text_list, offsets = [], [], [0] for (_label, _text) in batch: label_list.append(label_pipeline(_label)) processed_text = torch.tensor(text_pipeline(_text), dtype=torch.int64) text_list.append(processed_text) offsets.append(processed_text.size(0) + offsets[-1]) label_list = torch.tensor(label_list, dtype=torch.int64).to(device) text_list = torch.cat(text_list).to(device) offsets = torch.tensor(offsets[:-1]).to(device) return label_list, text_list, offsets
- Listas vacías: Se declaran listas vacías
label_list
,text_list
, y una listaoffsets
inicializada en 0. - Recorrido de batch: Se itera sobre cada texto, obteniendo y procesando etiquetas y textos para almacenarlos adecuadamente.
- Transformación a tensores: Las listas se convierten a tensores adecuados para PyTorch y se llevan al dispositivo correspondiente (CPU o CUDA).
- Listas vacías: Se declaran listas vacías
¿Cómo mejora la suma acumulativa cumsum
el manejo de datos?
La función cumsum
en PyTorch proporciona la suma acumulativa de los elementos a lo largo de una dimensión especificada. En este contexto, se utiliza para determinar los puntos de inicio de cada nuevo texto dentro del tensor de datos concatenados. Este método es vital para gestionar adecuadamente el flujo de datos en estructuras de texto:
- Función
cumsum
:
Al aplicaroffsets = torch.tensor(offsets[:-1]).cumsum(dim=0).to(device)
cumsum
, se asegura que cada elemento enoffsets
indique el comienzo del siguiente texto en la fila de datos concatenados.
El uso de Data Loaders es una técnica poderosa que merece ser dominada para optimizar el rendimiento en proyectos de machine learning y deep learning. Aprender y practicar su implementación expandirá tus habilidades y te permitirá abordar proyectos más avanzados con confianza. ¡Sigue aprendiendo e investigando!