Trabalhando com Conjuntos de Dados
Para simplificar a preparação de dados para modelos de aprendizado de máquina e possibilitar um processamento em lote eficiente, embaralhamento e manipulação de dados, o PyTorch oferece as utilidades TensorDataset e DataLoader.
Carregando e Inspecionando o Conjunto de Dados
Será utilizado um conjunto de dados (wine.csv) contendo informações sobre diferentes tipos de vinho, incluindo suas características e os respectivos rótulos de classe.
Primeiramente, carregar o conjunto de dados e inspecionar sua estrutura para compreender as características e a variável alvo:
123import pandas as pd wine_df = pd.read_csv('https://content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') print(wine_df.head())
Criando um TensorDataset
O próximo passo é separar as features e o alvo, convertê-los em tensores PyTorch e utilizar esses tensores diretamente para criar um TensorDataset. Garantimos que as features sejam do tipo float32 (para manipulação de números de ponto flutuante) e o alvo seja do tipo long (um tipo inteiro de 64 bits adequado para rótulos).
import pandas as pd
import torch
from torch.utils.data import TensorDataset
wine_df = pd.read_csv('https://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
)
Utilizando DataLoader para Processamento em Lotes
Para facilitar o processamento em lotes, embaralhamento e carregamento eficiente de dados durante o treinamento, encapsulamos o TensorDataset em um DataLoader. Esta etapa é fundamental para gerenciar o fluxo de dados para o modelo durante o treinamento, especialmente ao trabalhar com conjuntos de dados maiores. O DataLoader permite:
- Processamento em lotes: dividir os dados em partes menores e gerenciáveis (lotes) para o treinamento, otimizando o uso de memória e permitindo atualizações de gradiente após cada lote;
- Embaralhamento: randomizar a ordem do conjunto de dados, o que ajuda a quebrar qualquer ordenação inerente nos dados e evita que o modelo aprenda padrões espúrios;
- Carregamento eficiente: gerenciar automaticamente a busca e o pré-processamento dos dados para cada lote durante o treinamento, reduzindo a sobrecarga.
123456789101112131415161718import pandas as pd import torch from torch.utils.data import TensorDataset, DataLoader wine_df = pd.read_csv('https://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 )
Com essa configuração, o DataLoader garante que o modelo receba lotes de dados de forma eficiente e em ordem aleatória. Isso é especialmente importante para o treinamento de redes neurais, pois ajuda o modelo a generalizar melhor para dados não vistos.
Iterando sobre o DataLoader
Agora é possível iterar sobre o DataLoader para acessar os lotes de dados. Cada lote contém uma 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)
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you explain what the output of the DataLoader iteration looks like?
How do I change the batch size or turn off shuffling in the DataLoader?
What are the benefits of using DataLoader over manual batching?
Awesome!
Completion rate improved to 5
Trabalhando com Conjuntos de Dados
Deslize para mostrar o menu
Para simplificar a preparação de dados para modelos de aprendizado de máquina e possibilitar um processamento em lote eficiente, embaralhamento e manipulação de dados, o PyTorch oferece as utilidades TensorDataset e DataLoader.
Carregando e Inspecionando o Conjunto de Dados
Será utilizado um conjunto de dados (wine.csv) contendo informações sobre diferentes tipos de vinho, incluindo suas características e os respectivos rótulos de classe.
Primeiramente, carregar o conjunto de dados e inspecionar sua estrutura para compreender as características e a variável alvo:
123import pandas as pd wine_df = pd.read_csv('https://content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/wine.csv') print(wine_df.head())
Criando um TensorDataset
O próximo passo é separar as features e o alvo, convertê-los em tensores PyTorch e utilizar esses tensores diretamente para criar um TensorDataset. Garantimos que as features sejam do tipo float32 (para manipulação de números de ponto flutuante) e o alvo seja do tipo long (um tipo inteiro de 64 bits adequado para rótulos).
import pandas as pd
import torch
from torch.utils.data import TensorDataset
wine_df = pd.read_csv('https://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
)
Utilizando DataLoader para Processamento em Lotes
Para facilitar o processamento em lotes, embaralhamento e carregamento eficiente de dados durante o treinamento, encapsulamos o TensorDataset em um DataLoader. Esta etapa é fundamental para gerenciar o fluxo de dados para o modelo durante o treinamento, especialmente ao trabalhar com conjuntos de dados maiores. O DataLoader permite:
- Processamento em lotes: dividir os dados em partes menores e gerenciáveis (lotes) para o treinamento, otimizando o uso de memória e permitindo atualizações de gradiente após cada lote;
- Embaralhamento: randomizar a ordem do conjunto de dados, o que ajuda a quebrar qualquer ordenação inerente nos dados e evita que o modelo aprenda padrões espúrios;
- Carregamento eficiente: gerenciar automaticamente a busca e o pré-processamento dos dados para cada lote durante o treinamento, reduzindo a sobrecarga.
123456789101112131415161718import pandas as pd import torch from torch.utils.data import TensorDataset, DataLoader wine_df = pd.read_csv('https://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 )
Com essa configuração, o DataLoader garante que o modelo receba lotes de dados de forma eficiente e em ordem aleatória. Isso é especialmente importante para o treinamento de redes neurais, pois ajuda o modelo a generalizar melhor para dados não vistos.
Iterando sobre o DataLoader
Agora é possível iterar sobre o DataLoader para acessar os lotes de dados. Cada lote contém uma 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)
Obrigado pelo seu feedback!