Робота з наборами даних
Свайпніть щоб показати меню
Для спрощення підготовки даних для моделей машинного навчання та забезпечення ефективної обробки пакетів, перемішування і керування даними, PyTorch надає утиліти TensorDataset та DataLoader.
Завантаження та огляд набору даних
Ми використаємо набір даних (wine.csv), що містить інформацію про різні види вина, включаючи їхні характеристики та відповідні класові мітки.
Спочатку завантажимо набір даних і переглянемо його структуру, щоб зрозуміти ознаки та цільову змінну:
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())
Створення TensorDataset
Наступний крок — відокремити ознаки та ціль, перетворити їх у тензори PyTorch і використати ці тензори безпосередньо для створення TensorDataset. Необхідно переконатися, що ознаки мають тип float32 (для роботи з числами з плаваючою комою), а ціль — типу long (64-бітний цілий тип, який підходить для міток).
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
)
Використання DataLoader для пакетної обробки
Для забезпечення пакетної обробки, перемішування та ефективного завантаження даних під час навчання, ми обгортаємо TensorDataset у DataLoader. Цей крок є важливим для керування потоком даних до моделі під час навчання, особливо при роботі з великими наборами даних. DataLoader дозволяє:
- Пакетна обробка: розбивати дані на менші, зручні для обробки частини (пакети) для навчання, що оптимізує використання пам'яті та дозволяє оновлювати градієнти після кожного пакета;
- Перемішування: випадковим чином змінювати порядок даних у наборі, що допомагає уникнути впливу початкового порядку та запобігає навчанню моделі хибним шаблонам;
- Ефективне завантаження: автоматично обробляти отримання та попередню обробку даних для кожного пакета під час навчання, зменшуючи затрати ресурсів.
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 )
З такою конфігурацією DataLoader забезпечує ефективну подачу батчів даних до моделі та у випадковому порядку. Це особливо важливо для навчання нейронних мереж, оскільки допомагає моделі краще узагальнювати на невідомих даних.
Ітерація по DataLoader
Тепер можна ітеруватися по DataLoader, щоб отримувати батчі даних. Кожен батч містить кортеж (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)
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат