Trabajando con Conjuntos de Datos
Para simplificar la preparación de datos para modelos de aprendizaje automático y permitir un procesamiento por lotes eficiente, mezcla aleatoria y gestión de datos, PyTorch proporciona las utilidades TensorDataset
y DataLoader
.
Carga e inspección del conjunto de datos
Utilizaremos un conjunto de datos (wine.csv
) que contiene información sobre diferentes tipos de vino, incluidas sus características y las etiquetas de clase correspondientes.
Primero, cargaremos el conjunto de datos e inspeccionaremos su estructura para comprender las características y la variable objetivo:
123import pandas as pd wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') print(wine_df.head())
Creación de un TensorDataset
El siguiente paso es separar las características y el objetivo, convertirlos en tensores de PyTorch y utilizar estos tensores directamente para crear un TensorDataset
. Nos aseguraremos de que las características sean de tipo float32
(para manejar números de punto flotante) y el objetivo sea de tipo long
(un tipo de entero de 64 bits adecuado para etiquetas).
import pandas as pd
import torch
from torch.utils.data import TensorDataset
wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv')
# Separate features and target
features = wine_df.drop(columns='quality').values
target = wine_df['quality'].values
# Create TensorDataset
wine_dataset = TensorDataset(
torch.tensor(features, dtype=torch.float32), # Features tensor
torch.tensor(target, dtype=torch.long) # Target tensor
)
Uso de DataLoader para el procesamiento por lotes
Para facilitar el procesamiento por lotes, el barajado y la carga eficiente de datos durante el entrenamiento, envolvemos el TensorDataset
en un DataLoader
. Este paso es crucial para gestionar el flujo de datos hacia el modelo durante el entrenamiento, especialmente cuando se trabaja con conjuntos de datos grandes. El DataLoader
nos permite:
- Procesamiento por lotes: dividir los datos en fragmentos más pequeños y manejables (lotes) para el entrenamiento, lo que optimiza el uso de memoria y permite actualizaciones de gradiente después de cada lote;
- Barajado: aleatorizar el orden del conjunto de datos, lo que ayuda a romper cualquier orden inherente en los datos y evita que el modelo aprenda patrones espurios;
- Carga eficiente: manejar automáticamente la obtención y el preprocesamiento de los datos para cada lote durante el entrenamiento, reduciendo la sobrecarga.
123456789101112131415161718import pandas as pd import torch from torch.utils.data import TensorDataset, DataLoader wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') # Separate features and target features = wine_df.drop(columns='quality').values target = wine_df['quality'].values # Create TensorDataset wine_dataset = TensorDataset( torch.tensor(features, dtype=torch.float32), # Features tensor torch.tensor(target, dtype=torch.long) # Target tensor ) # Wrap the dataset in a DataLoader wine_loader = DataLoader( wine_dataset, # TensorDataset batch_size=32, # Number of samples per batch shuffle=True # Randomize the order of the data )
Con esta configuración, el DataLoader
garantiza que el modelo reciba lotes de datos de manera eficiente y en orden aleatorio. Esto es especialmente importante para el entrenamiento de redes neuronales, ya que ayuda al modelo a generalizar mejor a datos no vistos.
Iteración sobre el DataLoader
Ahora podemos iterar sobre el DataLoader
para acceder a los lotes de datos. Cada lote contiene una tupla (batch_features, batch_targets)
:
123456789101112131415161718192021222324import pandas as pd import torch from torch.utils.data import TensorDataset, DataLoader wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') # Separate features and target features = wine_df.drop(columns='quality').values target = wine_df['quality'].values # Create TensorDataset wine_dataset = TensorDataset( torch.tensor(features, dtype=torch.float32), # Features tensor torch.tensor(target, dtype=torch.long) # Target tensor ) # Wrap the dataset in a DataLoader wine_loader = DataLoader( wine_dataset, # TensorDataset batch_size=32, # Number of samples per batch shuffle=True # Randomize the order of the data ) # Iterate through batches for batch_idx, (batch_features, batch_targets) in enumerate(wine_loader): print(f"Batch {batch_idx+1}") print(f"Features: {batch_features}") print(f"Targets: {batch_targets}") print("-" * 30)
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 5
Trabajando con Conjuntos de Datos
Desliza para mostrar el menú
Para simplificar la preparación de datos para modelos de aprendizaje automático y permitir un procesamiento por lotes eficiente, mezcla aleatoria y gestión de datos, PyTorch proporciona las utilidades TensorDataset
y DataLoader
.
Carga e inspección del conjunto de datos
Utilizaremos un conjunto de datos (wine.csv
) que contiene información sobre diferentes tipos de vino, incluidas sus características y las etiquetas de clase correspondientes.
Primero, cargaremos el conjunto de datos e inspeccionaremos su estructura para comprender las características y la variable objetivo:
123import pandas as pd wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') print(wine_df.head())
Creación de un TensorDataset
El siguiente paso es separar las características y el objetivo, convertirlos en tensores de PyTorch y utilizar estos tensores directamente para crear un TensorDataset
. Nos aseguraremos de que las características sean de tipo float32
(para manejar números de punto flotante) y el objetivo sea de tipo long
(un tipo de entero de 64 bits adecuado para etiquetas).
import pandas as pd
import torch
from torch.utils.data import TensorDataset
wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv')
# Separate features and target
features = wine_df.drop(columns='quality').values
target = wine_df['quality'].values
# Create TensorDataset
wine_dataset = TensorDataset(
torch.tensor(features, dtype=torch.float32), # Features tensor
torch.tensor(target, dtype=torch.long) # Target tensor
)
Uso de DataLoader para el procesamiento por lotes
Para facilitar el procesamiento por lotes, el barajado y la carga eficiente de datos durante el entrenamiento, envolvemos el TensorDataset
en un DataLoader
. Este paso es crucial para gestionar el flujo de datos hacia el modelo durante el entrenamiento, especialmente cuando se trabaja con conjuntos de datos grandes. El DataLoader
nos permite:
- Procesamiento por lotes: dividir los datos en fragmentos más pequeños y manejables (lotes) para el entrenamiento, lo que optimiza el uso de memoria y permite actualizaciones de gradiente después de cada lote;
- Barajado: aleatorizar el orden del conjunto de datos, lo que ayuda a romper cualquier orden inherente en los datos y evita que el modelo aprenda patrones espurios;
- Carga eficiente: manejar automáticamente la obtención y el preprocesamiento de los datos para cada lote durante el entrenamiento, reduciendo la sobrecarga.
123456789101112131415161718import pandas as pd import torch from torch.utils.data import TensorDataset, DataLoader wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') # Separate features and target features = wine_df.drop(columns='quality').values target = wine_df['quality'].values # Create TensorDataset wine_dataset = TensorDataset( torch.tensor(features, dtype=torch.float32), # Features tensor torch.tensor(target, dtype=torch.long) # Target tensor ) # Wrap the dataset in a DataLoader wine_loader = DataLoader( wine_dataset, # TensorDataset batch_size=32, # Number of samples per batch shuffle=True # Randomize the order of the data )
Con esta configuración, el DataLoader
garantiza que el modelo reciba lotes de datos de manera eficiente y en orden aleatorio. Esto es especialmente importante para el entrenamiento de redes neuronales, ya que ayuda al modelo a generalizar mejor a datos no vistos.
Iteración sobre el DataLoader
Ahora podemos iterar sobre el DataLoader
para acceder a los lotes de datos. Cada lote contiene una tupla (batch_features, batch_targets)
:
123456789101112131415161718192021222324import pandas as pd import torch from torch.utils.data import TensorDataset, DataLoader wine_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') # Separate features and target features = wine_df.drop(columns='quality').values target = wine_df['quality'].values # Create TensorDataset wine_dataset = TensorDataset( torch.tensor(features, dtype=torch.float32), # Features tensor torch.tensor(target, dtype=torch.long) # Target tensor ) # Wrap the dataset in a DataLoader wine_loader = DataLoader( wine_dataset, # TensorDataset batch_size=32, # Number of samples per batch shuffle=True # Randomize the order of the data ) # Iterate through batches for batch_idx, (batch_features, batch_targets) in enumerate(wine_loader): print(f"Batch {batch_idx+1}") print(f"Features: {batch_features}") print(f"Targets: {batch_targets}") print("-" * 30)
¡Gracias por tus comentarios!