Pytorch深度学习笔记(九)加载数据集

目录

1.名词解释

2. 数据集加载器Dataloader

3.完整代码


推荐课程:08.加载数据集_哔哩哔哩_bilibili

1.名词解释

名词解释:Epoch,Batch,Batch-Size,Iterations

Epoch(周期):指所有的训练样本都进行一次前向和反向传播

Batch-Size(批量大小):batch进行一次前向和反向传播的样本数量

Iterations(迭代):完成一次epoch中batch的次数

2. 数据集加载器Dataloader

DataLoader是pytorch定义的数据集加载器
通过DataLoader设置mini_batch,设置DataLoader相关参数即可

DataLoader参数:

dataset:数据集

num_workers:需要几个并行的进程读取数据

batch_size:一次batch所需的样本数量

shuffle:是否打乱数据集顺序,打乱数据集有利于模型克服“鞍点问题”

只要数据集能支持索引和提供数据集长度,DataLoader就能对数据集生产batch。

处理数据集两种方法:1.数据集不够大,直接读进内存。2.数据集所占空间比较大,像图片、语音的数据集,将文件名读进内存,根据文件名加载问价。

代码实现(使用数据集加载器Dataloader加载diabetes数据集):

# 自定义数据集类
class DiabetesDataset(Dataset):
    def __init__(self, filepath):
        # 返回nbarray多维数组
        xy = np.loadtxt(filepath, delimiter=',',dtype=np.float32)
        # shape函数读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。
        self.len = xy.shape[0]
        # 数组切片,x[start:stop:step],step为负值表示为逆序。from_numpy函数,numpy转torch
        self.x_data = torch.from_numpy(xy[:,:-1])
        # [-1] 最后得到的是个矩阵
        self.y_data = torch.from_numpy(xy[:, [-1]])

    # 通过索引拿数据
    def __getitem__(self, index):
        return self.x_data[index], self.y_data[index]

    # 返回数据集长度
    def __len__(self):
        return self.len


dataset = DiabetesDataset('dataset/diabetes.csv')
# DataLoader是pytorch定义的数据集加载器
# dataset数据集,batch_size小批量所需的数据量,shuffle是否要打乱数据集,num_workers需要几个并行的进程读取数据
# 通过DataLoader设置mini_batch
train_loader = DataLoader(dataset=dataset,
                          batch_size=32,
                          shuffle=True,
                          num_workers=2)

3.完整代码

import numpy as np
import torch
# Dataset是一个抽象类,我们必须自定义数据集类并继承这个类
from torch.utils.data import Dataset
from torch.utils.data import DataLoader

#……1.准备数据集……………………………………………………………………………………………………………………………#
# 自定义数据集类
class DiabetesDataset(Dataset):
    def __init__(self, filepath):
        # 返回nbarray多维数组
        xy = np.loadtxt(filepath, delimiter=',',dtype=np.float32)
        # shape函数读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。
        self.len = xy.shape[0]
        # 数组切片,x[start:stop:step],step为负值表示为逆序。from_numpy函数,numpy转torch
        self.x_data = torch.from_numpy(xy[:,:-1])
        # [-1] 最后得到的是个矩阵
        self.y_data = torch.from_numpy(xy[:, [-1]])

    # 通过索引拿数据
    def __getitem__(self, index):
        return self.x_data[index], self.y_data[index]

    # 返回数据集长度
    def __len__(self):
        return self.len


dataset = DiabetesDataset('dataset/diabetes.csv')
# DataLoader是pytorch定义的数据集加载器
# dataset数据集,batch_size小批量所需的数据量,shuffle是否要打乱数据集,num_workers需要几个并行的进程读取数据
# 通过DataLoader设置mini_batch
train_loader = DataLoader(dataset=dataset,
                          batch_size=32,
                          shuffle=True,
                          num_workers=2)

#…2.设计模型………………………………………………………………………………………………………………………………………#
# 继承torch.nn.Module,定义自己的计算模块,neural network
class Model(torch.nn.Module):
    # 构造函数
    def __init__(self):
        # 调用父类构造
        super(Model, self).__init__()
        # 从8维降到6维再降到4维再降到1维
        self.linear1 = torch.nn.Linear(8, 6)
        self.linear2 = torch.nn.Linear(6, 4)
        self.linear3 = torch.nn.Linear(4, 1)
        self.sigmoid = torch.nn.Sigmoid()

    # 前馈函数
    def forward(self, x):
        # 调用self.sigmoid,并linear
        x = self.sigmoid(self.linear1(x))
        x = self.sigmoid(self.linear2(x))
        x = self.sigmoid(self.linear3(x))
        return x

#……3.构造损失函数和优化器………………………………………………………………………………………………………#
# 实例化自定义模型,返回做logistic变化(也叫sigmoid)的预测值
model = Model()
# 实例化损失函数,返回损失值
criterion = torch.nn.BCELoss(size_average=True)
# 实例化优化器,优化权重w
# model.parameters(),取出模型中的参数,lr为学习率
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)


#……训练周期……………………………………………………………………………………………………………………………………………#
if __name__ == '__main__':
    for epoch in range(100):
        # 迭代train_loader
        # 根据自定义数据集类返回的data包含(x_data,y_data),enumerate能够获取是第几次迭代
        for i, data in enumerate(train_loader, 0):
            # 1.准备数据
            inputs, labels = data
            # 2.正向传播
            y_pred = model(inputs)
            loss = criterion(y_pred, labels)
            print(epoch, i, loss.item())
            # 3.反向传播
            optimizer.zero_grad()
            loss.backward()
            # 4.更新权重w
            optimizer.step()

练习:构造一个分类模型使用titanic数据集

Titanic - Machine Learning from Disaster | Kaggle

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
PyTorch是一个用于深度学习的开源框架,它提供了一组工具和接口,使得我们可以轻松地进行模型训练、预测和部署。在PyTorch中,数据处理是深度学习应用的重要部分之一。 PyTorch中的数据处理主要涉及以下几个方面: 1.数据预处理:包括数据清洗、数据归一化、数据增强等操作,以提高模型的鲁棒性和泛化能力。 2.数据加载PyTorch提供了多种数据加载方式,包括内置的数据集、自定义的数据集和数据加载器等,以便我们更好地管理和使用数据。 3.数据可视化:为了更好地理解数据和模型,PyTorch提供了多种数据可视化工具,如Matplotlib、TensorBoard等。 下面是一个简单的数据预处理示例,展示如何将图像进行归一化和数据增强: ```python import torch import torchvision.transforms as transforms from torchvision.datasets import CIFAR10 # 定义一个数据预处理管道 transform_train = transforms.Compose([ transforms.RandomCrop(32, padding=4), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize(mean=[0.4914, 0.4822, 0.4465], std=[0.2023, 0.1994, 0.2010]) ]) # 加载CIFAR10数据集,进行预处理 trainset = CIFAR10(root='./data', train=True, download=True, transform=transform_train) trainloader = torch.utils.data.DataLoader(trainset, batch_size=128, shuffle=True, num_workers=2) ``` 在上面的例子中,我们首先定义了一个数据预处理管道,其中包括了对图像进行随机裁剪、水平翻转、归一化等操作。然后,我们使用PyTorch内置的CIFAR10数据集,并将其预处理后,使用DataLoader进行批量加载。这个过程可以帮助我们更好地管理和使用数据,同时提高模型的训练效率和泛化能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向岸看

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值