PyTorch----数据加载器

什么是数据加载器?

  • 深度学习是由数据支撑起来的,所以我们一般在做深度学习的时候往往伴随着大量、复杂的数据。如果把所有的数据全部加载到内存上,容易把电脑的内存“撑爆”,所以要分批次一点点加载数据
  • 每一种深度学习的框架都有自己所规定的数据格式,数据加载器就有了必要的作用
  • 数据加载器就是把大量的数据,分批次加载和处理成框架所需要的数据格式

数据分批次加载

使用PyTorch内置的模块 torch.utils.data.DataLoader()数据加载器

参数

  1. dataset:数据集
  2. batch_size: 每一批数据的总量
  3. shuffle: True or False 为True的时候会将数据打乱再分批

PyTorch自带MNIST数据的分批

手写数字数据集

  1. 加载数据MNIST数据集在torchvision.datasets.MNIST中
import torch
import torchvision

train_dataset = torchvision.datasets.MNIST(root="./data1",train=True,transform=torchvision.transforms.ToTensor(),download=False)
  1. 取出一张图片展示
import numpy as np
import matplotlib.pyplot as plt

# 获取到第一条数据
data,label = train_dataset[0]

# 因为数据集里面的数据进行过归一化,所以要反归一化
img = np.array(data) * 255
img = img.reshape(28,28).astype(np.uint8)
# 展示
plt.imshow(img,'gray')
plt.show()

在这里插入图片描述

  1. 使用DataLoader方法分批次
from torch.utils.data import DataLoader
# 创建DataLoader对象
train_loader = DataLoader(dataset=train_dataset,batch_size=100,shuffle=True)

num_epochs = 1
for epoch in range(num_epochs):
	# 第二层循环会每次打开一批次的数据 当前一批次为100
    for i,(inputs,labels) in enumerate(train_loader):
        print(f'Epoch: {epoch+1}/{num_epochs},Step {i+1}/{len(train_dataset)/100}| Inputs {inputs.shape} | Labels {labels.shape}')
        # 当前inputs和labels里面有100条数据
        print(labels)
        break
print(len(train_loader))

在这里插入图片描述


自定义Dataset类

  • DataLoader()的dataset参数必须继承于PyTorch的Dataset类
  • 只有继承了PyTorch中的Dataset接口的类,才能够被传入DataLoader中

自定义一个Dataset类,让PyTorch去认识我们的数据

步骤:

  • 创建一个类继承Dataset

  • __init__魔法方法内读取数据

    • 获取到数据的长度
    • 获取到特征数据和输出标签
  • __getitem__方法内返回第index条数据

  • __len__方法内返回数据的长度

from torch.utils.data import Dataset
class WineDataset(Dataset):
    def __init__(self):
        # 读取csv数据
        xy = pd.read_csv("./wine.csv")
        # 获取到数据的长度
        self.n_samples = xy.shape[0]
        # 特征数据
        self.x_data = torch.from_numpy(xy.values[:,1:])
        # 输出标签
        self.y_data = torch.from_numpy(xy.values[:,0])
        
    def __getitem__(self,index):
        # 遍历的时候返回数据  可迭代对象
        return self.x_data[index],self.y_data[index]
    
    def __len__(self.n_samples):
        # 返回数据长度
        return self.n_sampleso
查看自定义的Dataset类:
# 使用DataLoader去加载数据集合
from torch.utils.data import DataLoader
import torch
wineData = WineDataset()
# 传入加载器
train_loader = DataLoader(dataset=wineData,batch_size=4,shuffle=True)
# 分批训练
# 迭代次数
epoch_num = 5
total_samples = len(wineData)
print("total_samples:",total_samples)
# 开始训练
for epoch in range(epoch_num):
    for i,(inputs,labels) in enumerate(train_loader):
        print(i,labels)

每次批次加载4条数据

在这里插入图片描述

因为数据分为4批次,是有余数的,所以最后一行数据不是4条:
在这里插入图片描述

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch-MNIST-MLP是一个使用PyTorch库和多层感知(MLP)来训练和测试MNIST手写数字数据集的项目。 MNIST是一个经典的手写数字识别数据集,包含了大量的手写数字图片和对应的标签。通过训练一个模型,我们可以实现自动识别手写数字的功能。 MLP是一种基本的人工神经网络模型,包含了多个全连接的神经网络层,并且每个神经元都与相邻层的所有神经元连接。通过多层的非线性变换和权重调整,MLP可以处理复杂的分类和回归任务。 PyTorch是一个开源的机器学习框架,提供了丰富的工具和函数来简化神经网络模型的构建和训练过程。通过PyTorch,我们可以轻松地搭建和训练MLP模型,并在MNIST数据集上进行实验。 在PyTorch-MNIST-MLP项目中,我们首先加载MNIST数据集,并将其转换成适合MLP模型的格式。然后,我们定义MLP模型的结构,包括输入层、隐藏层和输出层,并使用PyTorch提供的函数来定义损失函数和优化。 接下来,我们使用训练数据集对MLP模型进行训练,通过反向传播算法和优化来逐步调整模型的权重和偏置。在训练过程中,我们可以监控模型的精确度和损失值,以评估模型的性能。 最后,我们使用测试数据集对训练好的模型进行测试,并计算模型在测试集上的准确率。通过比较预测结果和真实标签,我们可以评估模型在手写数字识别任务上的表现。 总之,PyTorch-MNIST-MLP是一个基于PyTorch库和MLP模型的项目,用于训练和测试MNIST手写数字数据集。通过该项目,我们可以学习和掌握使用PyTorch构建神经网络模型的基本方法,并实现手写数字识别的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值