pytoch如何加载批量数据--Dataset,DataLoader

2024-03-11 11:12

本文主要是介绍pytoch如何加载批量数据--Dataset,DataLoader,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Dataset

Dataset 是一个抽象类。我们可以定义一个类继承这个类,从而加载数据,构造数据集(索引)

DataLoader

DataLoader是一个帮助我们在Pytorch中加载数据的类,在训练测试时加载数据,获取mini-batch
使用说明:¶
epoch:One forward pass and one backward pass of all the training examples. 训练次数
batch-size:The number of tarining examples in one forward backward pass. 每次用的样本数量
iterations:Number of passes,each pass using [batch size] number of examples. 迭代的数量 样本数量/batch
import torch
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
import numpy as np
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
准备数据: 实现三个魔法方法
# 继承抽象类Dataset,实现三个方法
class DiabetesDataset(Dataset):# def __init__(self,filepath):#     data =  np.loadtxt(filepath,delimiter=',',dtype=np.float32)#     self.len = data.shape[0]  # (d0,d1,d2..) d0#     self.X = torch.from_numpy(data[:,:-1])#     self.Y = torch.from_numpy(data[:,[-1]])# 1.所有数据一次性加载# 2.每次只加载batch的数据def __init__(self,data,label):self.len = data.shape[0]self.X = torch.from_numpy(data)self.Y = torch.from_numpy(label)# 实例化类后,使对象支持索引操作 The expression,dataset[index],will call this magic functiondef __getitem__(self,index):return self.X[index], self.Y[index] # 返回元组 # this magic function returns length of datasetdef __len__(self):return self.len# 划分训练集和测试集    
data =  np.loadtxt('diabetes.csv',delimiter=',',dtype=np.float32)
X = data[:,:-1]
Y = data[:,[-1]]
# train_data,test_data = train_test_split(data,test_size=0.2,random_state=42)
Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,Y,test_size=0.2)# 实例化dataset类
dataset = DiabetesDataset(Xtrain,Ytrain)
# DataLoader:加载器 Initialize loader with batch-size,shuffle,process number
train_loader = DataLoader(dataset=dataset,batch_size=15,shuffle=True# ,num_workers=2)
# num_workers 线程,并发数,用了发现超conda虚拟内存

diabetes.csv糖尿病数据集

        链接:https://pan.baidu.com/s/1a-6ToVlXr7QfYAnHIpWnNg?pwd=1234 
        提取码:1234 

设计模型:
class Model(torch.nn.Module):def __init__(self):super(Model,self).__init__()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):x = self.sigmoid(self.linear1(x))x = self.sigmoid(self.linear2(x))x = self.sigmoid(self.linear3(x))return xmodel = Model()

构造损失函数和优化器
criterion = torch.nn.BCELoss(size_average=True,reduction='mean')
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

训练
# if name==__main__():
for epoch in range(10000):for i,data in enumerate(train_loader,0):# for i,(x,y) in enumerate(train_loader,0):inputs,labels = datay_pred = model(inputs)loss = criterion(y_pred,labels)# print(epoch,i,loss.item())optimizer.zero_grad()loss.backward()optimizer.step()

测试
x_test = torch.from_numpy(Xtest)
y_test = torch.from_numpy(Ytest)
y_pred = model(x_test)
y_pred_label = torch.where(y_pred>=0.5,torch.tensor([1.0]),torch.tensor([0.0]))
acc = torch.eq(y_pred_label, y_test).sum().item()/y_test.size(0)
print("acc = ",acc)

这篇关于pytoch如何加载批量数据--Dataset,DataLoader的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797639

相关文章

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

MySQL数据脱敏的实现方法

《MySQL数据脱敏的实现方法》本文主要介绍了MySQL数据脱敏的实现方法,包括字符替换、加密等方法,通过工具类和数据库服务整合,确保敏感信息在查询结果中被掩码处理,感兴趣的可以了解一下... 目录一. 数据脱敏的方法二. 字符替换脱敏1. 创建数据脱敏工具类三. 整合到数据库操作1. 创建服务类进行数据库

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒

SpringBoot加载profile全面解析

《SpringBoot加载profile全面解析》SpringBoot的Profile机制通过多配置文件和注解实现环境隔离,支持开发、测试、生产等不同环境的灵活配置切换,无需修改代码,关键点包括配置文... 目录题目详细答案什么是 Profile配置 Profile使用application-{profil

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC