Trabalhando com Conjuntos de Dados
Para simplificar a preparação de dados para modelos de aprendizado de máquina e possibilitar processamento em lote, embaralhamento e manipulação eficiente de dados, o PyTorch fornece 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 rótulos de classe correspondentes.
Primeiramente, carregue o conjunto de dados e inspecione sua estrutura para compreender as características e a variável alvo:
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())
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 lidar com números de ponto flutuante) e o alvo 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://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
)
Utilizando DataLoader para Processamento em Lotes
Para facilitar o processamento em lotes, embaralhamento e carregamento eficiente dos dados durante o treinamento, envolvemos 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 impede que o modelo aprenda padrões espúrios;
- Carregamento eficiente: lidar automaticamente com a busca e 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://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 )
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.
Iteração sobre o DataLoader
Agora é possível iterar sobre o DataLoader
para acessar 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 in the DataLoader?
What should I do if my dataset has missing values?
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 processamento em lote, embaralhamento e manipulação eficiente de dados, o PyTorch fornece 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 rótulos de classe correspondentes.
Primeiramente, carregue o conjunto de dados e inspecione sua estrutura para compreender as características e a variável alvo:
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())
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 lidar com números de ponto flutuante) e o alvo 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://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
)
Utilizando DataLoader para Processamento em Lotes
Para facilitar o processamento em lotes, embaralhamento e carregamento eficiente dos dados durante o treinamento, envolvemos 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 impede que o modelo aprenda padrões espúrios;
- Carregamento eficiente: lidar automaticamente com a busca e 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://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 )
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.
Iteração sobre o DataLoader
Agora é possível iterar sobre o DataLoader
para acessar 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!