Pytorch训练集和测试集划分及训练集批次的划分与加载—torch.utils.data.TensorDataset、torch.utils.data.random_split、DataLoader

import torch
from torch.utils.data import random_split
import torch.utils.data as Data
train_x = torch.randn(10,8)
train_y = torch.randn(10,2)
print(train_x)
print(train_y)

输出结果:
tensor([[ 0.5008, 0.9868, -0.7672, -1.1820, -2.6178, 1.4705, -1.7990, -1.1078],
[-1.5842, 1.5206, 0.7272, -2.5919, 0.8682, 0.8757, 0.4569, -0.2744],
[-0.2444, -0.5412, -0.1766, 1.2055, -0.3636, 0.7021, -1.1178, 0.0898],
[ 0.4265, 0.0072, 0.0930, -0.6339, -0.9330, 0.5838, 0.0063, -1.0317],
[-0.5715, -0.0705, -1.4860, -0.6964, -0.6595, -0.1626, -0.9456, -1.3202],
[ 0.6300, 0.5818, -0.9379, 0.9910, -0.9728, -0.4468, 0.9327, 1.1673],
[-1.4601, -0.2334, 0.4478, 0.9095, -0.3818, 0.4027, 0.4042, 0.0059],
[-0.0446, -1.7432, -0.6294, -0.4040, 0.2583, -0.3803, 0.0877, 0.5360],
[ 2.0558, 1.5085, 0.5044, 0.3813, -0.7915, -1.5292, 0.2047, -1.0494],
[ 0.8640, 0.3738, 1.4807, 0.9262, 0.3545, 0.9699, -2.2665, 0.3594]])
tensor([[-1.0027, 0.1449],
[ 0.2390, -1.5291],
[ 0.1028, 0.3678],
[-0.1806, 2.0617],
[ 0.0627, -0.7183],
[-1.7710, -0.2113],
[ 1.3260, 0.6122],
[-0.3938, 0.5924],
[ 1.3044, 0.8457],
[ 0.3679, -1.9822]])
打包训练数据和训练数据的标签

dataset = Data.TensorDataset(train_x,train_y)  #把训练集和标签继续封装

把训练数据和训练数据的标签一起划分为8:2

train_data,eval_data=random_split(dataset,[round(0.8*train_x.shape[0]),round(0.2*train_x.shape[0])],generator=torch.Generator().manual_seed(42)) 
for i in train_data:
    print(i)

输出结果:(8份,说明划分成功)
(tensor([-0.2444, -0.5412, -0.1766, 1.2055, -0.3636, 0.7021, -1.1178, 0.0898]), tensor([0.1028, 0.3678]))
(tensor([-1.4601, -0.2334, 0.4478, 0.9095, -0.3818, 0.4027, 0.4042, 0.0059]), tensor([1.3260, 0.6122]))
(tensor([-1.5842, 1.5206, 0.7272, -2.5919, 0.8682, 0.8757, 0.4569, -0.2744]), tensor([ 0.2390, -1.5291]))
(tensor([ 2.0558, 1.5085, 0.5044, 0.3813, -0.7915, -1.5292, 0.2047, -1.0494]), tensor([1.3044, 0.8457]))
(tensor([-0.5715, -0.0705, -1.4860, -0.6964, -0.6595, -0.1626, -0.9456, -1.3202]), tensor([ 0.0627, -0.7183]))
(tensor([ 0.6300, 0.5818, -0.9379, 0.9910, -0.9728, -0.4468, 0.9327, 1.1673]), tensor([-1.7710, -0.2113]))
(tensor([ 0.5008, 0.9868, -0.7672, -1.1820, -2.6178, 1.4705, -1.7990, -1.1078]), tensor([-1.0027, 0.1449]))
(tensor([ 0.8640, 0.3738, 1.4807, 0.9262, 0.3545, 0.9699, -2.2665, 0.3594]), tensor([ 0.3679, -1.9822]))
按照批次划分与加载

loader = Data.DataLoader(dataset = train_data, batch_size = 2, shuffle = True, num_workers = 0 , drop_last=False)
for step,(train_x,train_y) in enumerate(loader):
    print(step,':',(train_x,train_y))

输出结果:(输出4个批次,每个批次中2个样本,因为batch_size=2)
0 : (tensor([[ 0.5008, 0.9868, -0.7672, -1.1820, -2.6178, 1.4705, -1.7990, -1.1078],
[-0.5715, -0.0705, -1.4860, -0.6964, -0.6595, -0.1626, -0.9456, -1.3202]]), tensor([[-1.0027, 0.1449],
[ 0.0627, -0.7183]]))
1 : (tensor([[ 0.6300, 0.5818, -0.9379, 0.9910, -0.9728, -0.4468, 0.9327, 1.1673],
[ 2.0558, 1.5085, 0.5044, 0.3813, -0.7915, -1.5292, 0.2047, -1.0494]]), tensor([[-1.7710, -0.2113],
[ 1.3044, 0.8457]]))
2 : (tensor([[-0.2444, -0.5412, -0.1766, 1.2055, -0.3636, 0.7021, -1.1178, 0.0898],
[ 0.8640, 0.3738, 1.4807, 0.9262, 0.3545, 0.9699, -2.2665, 0.3594]]), tensor([[ 0.1028, 0.3678],
[ 0.3679, -1.9822]]))
3 : (tensor([[-1.5842, 1.5206, 0.7272, -2.5919, 0.8682, 0.8757, 0.4569, -0.2744],
[-1.4601, -0.2334, 0.4478, 0.9095, -0.3818, 0.4027, 0.4042, 0.0059]]), tensor([[ 0.2390, -1.5291],
[ 1.3260, 0.6122]]))

代码:

import torch
from torch.utils.data import random_split
import torch.utils.data as Data
train_x = torch.randn(10,8)
train_y = torch.randn(10,2)
print(train_x)
print(train_y)
dataset = Data.TensorDataset(train_x,train_y)  #把训练集和标签继续封装
train_data,eval_data=random_split(dataset,[round(0.8*train_x.shape[0]),round(0.2*train_x.shape[0])],generator=torch.Generator().manual_seed(42))  #把数据机随机切分训练集和验证集
for i in train_data:
    print(i)
loader = Data.DataLoader(dataset = train_data, batch_size = 2, shuffle = True, num_workers = 0 , drop_last=False)
for step,(train_x,train_y) in enumerate(loader):
    print(step,':',(train_x,train_y))
  • 15
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: torch.utils.data.random_splitPyTorch 中的一个数据集划分函数,用于将一个数据集随机划分为多个数据集。它接受两个参数:待划分的数据集和划分比例(比如 [0.8, 0.2] 表示将数据集划分为 80% 和 20% 两部分)。返回值是一个包含划分出来的数据集的元组。 ### 回答2: torch.utils.data.random_splitPyTorch提供的一个非常有用的数据集划分函数,可以帮助我们将数据集划分训练集和验证集。其功能是将一个数据集按照给定的比例随机划分为两个子集。 在机器学习中,通常需要将数据划分训练集、验证集和测试集,以便对模型进行训练、验证和测试。划分数据集有多种方式,一种最常见的方式是将数据集按照50/50或80/20的比例随机分成训练集和验证集。 PyTorch提供的random_split函数可以帮助我们轻松地完成这个任务。该函数的主要输入是数据集和要划分的比例,它返回两个数据集,一个是训练集,另一个是验证集。这些数据集包含输入和目标张量。在划分数据集之前,我们需要将原始数据集转换为PyTorch支持的Dataset类。 下面是torch.utils.data.random_split的使用示例代码: ```python from torch.utils.data import Dataset from torch.utils.data import DataLoader from torch.utils.data import random_split class IrisDataset(Dataset): def __init__(self, X, y): super(IrisDataset,self).__init__() self.X = X self.y = y def __getitem__(self, index): return self.X[index], self.y[index] def __len__(self): return len(self.X) # 创建数据集 dataset = IrisDataset(X, y) # 指定训练集和验证集的比例 train_ratio = 0.8 val_ratio = 0.2 # 计算划分的长度 train_len = int(train_ratio * len(dataset)) val_len = len(dataset) - train_len # 划分数据集 train_set, val_set = random_split(dataset, [train_len, val_len]) # 创建数据加载器 train_loader = DataLoader(dataset=train_set, batch_size=64, shuffle=True) val_loader = DataLoader(dataset=val_set, batch_size=64, shuffle=True) ``` 在上述示例代码中,我们创建了一个虚构的IrisDataset类,它包含输入和目标张量。然后,我们创建了一个IrisDataset实例,并将其传递给random_split函数,以便将数据集划分训练集和验证集。接下来,我们使用DataLoader创建训练集和验证集的迭代器。 总之,torch.utils.data.random_split是一个用于划分数据集的非常方便的函数,可以快速准确地进行训练集和验证集的分割。使用它可以帮助我们更好地管理数据集,并提高机器学习模型的性能。 ### 回答3: torch.utils.data.random_split是一个PyTorch中的数据集划分函数,用于将数据集按照一定比例随机划分为两个子集。该函数的输入参数为原始数据集dataset划分比例,可以指定划分后子集的大小或比例。返回的结果是两个数据集对象,也可以进一步使用PyTorch提供的数据加载器对数据集进行操作。 在深度学习中,划分训练集、验证集和测试集是非常重要的步骤。可以通过将原始数据集按照一定比例划分训练集测试集,为模型评估和模型选择提供数据集的支持。在训练集中再将一部分数据划分为验证集,用于调整模型的超参数和防止模型出现过拟合。因此,使用torch.utils.data.random_split函数来随机划分数据集是非常有用的。 常见的划分方法如下: 1. 将原始数据集按照一定比例划分训练集测试集,比如常见的7:3或8:2的比例。 2. 在训练集中再将一部分数据划分为验证集,比如常见的8:1:1或者9:1的比例。 使用torch.utils.data.random_split函数,可以非常方便地实现这种随机划分,具体例子如下: ``` from torch.utils.data import DataLoader, Dataset, random_split class MyDataset(Dataset): def __init__(self, data_list): self.data_list = data_list def __getitem__(self, index): return self.data_list[index] def __len__(self): return len(self.data_list) data = [i for i in range(100)] dataset = MyDataset(data) train_size = int(0.8 * len(dataset)) test_size = len(dataset) - train_size train_dataset, test_dataset = random_split(dataset, [train_size, test_size]) train_loader = DataLoader(train_dataset, batch_size=10, shuffle=True) test_loader = DataLoader(test_dataset, batch_size=10, shuffle=False) ``` 上述代码将原始数据集按照8:2的比例随机划分为train_dataset和test_dataset两个数据集对象,其中train_size表示训练集大小,test_size表示测试集大小。最后再将划分后的数据集对象传入DataLoader构建数据加载器进行进一步处理。 实际应用中,可以根据具体任务需求进行相应的数据集划分方法选择和调整。同时也需要注意,随机划分数据集可能会引入一定的随机误差,因此需要多次重复实验,评估模型的平均表现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值