📅  最后修改于: 2023-12-03 15:10:06.986000             🧑  作者: Mango
在进行机器学习任务时,经常需要将数据集拆分成训练集、验证集和测试集。而 PyTorch 提供了一个方便的工具来帮助我们进行此操作,即 torch.utils.data.random_split
。
但是,对于自定义的 PyTorch 数据集,我们需要对数据集类进行一些修改,以便可以对其进行拆分。
在本文中,我们将介绍如何对自定义的 PyTorch 数据集进行拆分。
我们需要导入 PyTorch 和 numpy 库。先安装一下:
!pip install torch numpy
然后导入:
import torch
from torch.utils.data import Dataset, Subset, random_split
import numpy as np
我们模拟一个自定义的数据集,该数据集包含 1000 个数据点,每个数据点有 10 个特征和一个标签:
class CustomDataset(Dataset):
def __init__(self, num_samples=1000, num_features=10, num_classes=2):
features = np.random.randn(num_samples, num_features)
labels = np.random.randint(num_classes, size=num_samples)
self.features = torch.from_numpy(features).float()
self.labels = torch.from_numpy(labels).long()
def __len__(self):
return len(self.features)
def __getitem__(self, idx):
return self.features[idx], self.labels[idx]
接下来,我们需要定义一个方法来将自定义数据集拆分成训练集、验证集和测试集。这里我们假设我们希望将数据集按 70% 的比例划分为训练集,20% 的比例划分为验证集,10% 的比例划分为测试集:
def split_dataset(dataset, val_ratio=0.2, test_ratio=0.1):
# 计算数据集的长度
dataset_size = len(dataset)
# 计算验证集和测试集的长度
val_size = int(dataset_size * val_ratio)
test_size = int(dataset_size * test_ratio)
# 计算训练集的长度
train_size = dataset_size - val_size - test_size
# 使用 random_split 函数将数据集随机分成训练集、验证集、测试集
train_dataset, val_dataset, test_dataset = random_split(dataset, [train_size, val_size, test_size])
return train_dataset, val_dataset, test_dataset
我们现在可以使用上述定义的方法来拆分数据集。假设我们有一个包含 1000 个数据点的数据集:
dataset = CustomDataset()
我们可以将其拆分为训练集、验证集和测试集:
train_dataset, val_dataset, test_dataset = split_dataset(dataset)
现在,我们可以使用这些数据集来进行训练、验证和测试。
本文介绍了如何对自定义的 PyTorch 数据集进行拆分,并演示了拆分数据集的方法。这里我们假设我们希望将数据集按 70% 的比例划分为训练集,20% 的比例划分为验证集,10% 的比例划分为测试集。当然,您也可以更改这些比例,以满足您的需求。