Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Trabajando con Conjuntos de Datos | Conceptos Más Avanzados
Esenciales de PyTorch

bookTrabajando 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:

123
import 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())
copy

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:

  1. 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;
  2. 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;
  3. Carga eficiente: manejar automáticamente la obtención y el preprocesamiento de los datos para cada lote durante el entrenamiento, reduciendo la sobrecarga.
123456789101112131415161718
import 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 )
copy

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):

123456789101112131415161718192021222324
import 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)
copy

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 5

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 5

bookTrabajando 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:

123
import 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())
copy

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:

  1. 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;
  2. 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;
  3. Carga eficiente: manejar automáticamente la obtención y el preprocesamiento de los datos para cada lote durante el entrenamiento, reduciendo la sobrecarga.
123456789101112131415161718
import 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 )
copy

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):

123456789101112131415161718192021222324
import 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)
copy

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 5
some-alt