加载数据集(Dataset and Dataloader)

news2024/12/22 23:04:57

dataset主要是用于构造数据集(支持索引),dataloader可以拿出一个mini-batch供我们快速使用。

一:上一节知识

一下是我们上一节提到的糖尿病数据集,其中在提到数据加载的时候,我们没有使用mini-batch的方法。

通常梯度下降有几种选择:

①Batch:选择全部数据传入,优点就是可以提升计算速度

②随机梯度下降:选择一个样本传入,优点是可以克服鞍点的问题

③mini-Batch:结合上述两种方法的优点

对于使用mini-batch需要明白的概念:Epoch,Batch-size,Iterations

Epoch:所有训练样本都经过一次的forward和一次的backward,称完成一次的epoch

Batch-size:指每次训练时所用的样本数量(forward,backward,updata)

Iterations:一共执行了多少个Batch-size,就是内层循环执行的次数

二:dataload

在做小批量的训练时,需要确定几个参数。

batch-size:每次训练时所用的样本数量

为了保证数据集的随机性,引入了shuffle=True 表示每次生成的mini-batch里的数据集都是打乱的。

得到数据集,数据集需要满足支持索引,知道长度。对其进行shuffle打乱顺序,接着进行分组loader,设置batch_size=2,所以每组有2个数值。

代码如下:

import torch
from torch.utils.data import Dataset #Dataset抽象类,只能继承使用
from torch.utils.data import DataLoader#用于加载数据,入batch_size,shuffle等,直接实例化使用

class DiabetesDataset(Dataset):#继承Dataset
    def __init__(self):
        pass
    
    def __getitem__(self,index):#实例化后可以支持下标操作,通过index把数据拿出来
        pass
    
    def __len__(self):#得到数据的条数
        pass

dataset = DiabetesDataset()
#dataset传数据集  batch_size小批量大小 shuffle是否打乱 num_works并行(此处为两个进程并行)
train_loader = DataLoader(dataset=dataset,batch_size=32,shuffle=True,num_workers=2)

使用多进程在后面的train_loader时,可能会报错,需要将后面使用到train_loader的语句封装起来。后面会有详细描述。

三:Dataset的实现

我们看到其实上面的代码关于初始化,索引,长度的函数都还没写,下面关于这三个部分进行详解:

代码:

import torch
import numpy as np
from torch.utils.data import Dataset #Dataset抽象类,只能继承使用
from torch.utils.data import DataLoader#用于加载数据,入batch_size,shuffle等,直接实例化使用

class DiabetesDataset(Dataset):#继承Dataset
    def __init__(self,filepath):#filepath是文件地址
        xy = np.loadtxt(filepath, delimiter=',',dtype=np.float32)#糖尿病人的相关因素
        self.len = xy.shape[0] #我们知道xy是一共矩阵nx9的矩阵,shape[0]得到整个数据集的个数
        self.x_data = torch.from_numpy(xy[:,:-1])#所有行,从第一列开始到最后一列(最后一列不要)
        self.y_data = torch.from_numpy(xy[:,[-1]])#所有行,最后一列([]是为了保证最后一列是一个矩阵,否则就是一个向量)
    
    def __getitem__(self,index):#实例化后可以支持下标操作,通过index把数据拿出来
        return self.x_data[index],self.y_data[index]
    
    def __len__(self):#得到数据的条数
        return self.len

dataset = DiabetesDataset('./dataset/diabetes.csv.gz')
#dataset传数据集  batch_size小批量大小 shuffle是否打乱 num_works并行(此处为两个进程并行)
train_loader = DataLoader(dataset=dataset,batch_size=32,shuffle=True,num_workers=2)

 

for epoch in range(100):#全部的所有数据运行100遍
    for i,data in enumerate(train_loader,0):#enumerate为了获取当前是第几次迭代 i得到的是index的数据,data对应的是(x,y)
        #1 数据准备
        inputs, labels = data #将x,y放入inputs和labels loader会自动的将data内的数变成张量
        #print (input,labels)
        #2 forward
        y_pred= model(inputs)
        loss = criterion(y_pred, labels)
        print(epoch, i, loss.item())
        #3 backward
        optimizer.zero_grad()
        loss.backward()
        #4 Updata
        optimizer.step()

其他部分和上一讲相同,整体的步骤如下:

四:练习 

从Titanic - Machine Learning from Disaster | Kaggle 网站使用他给的数据进行联系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统下载htop

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、在Debian/Ubuntu上安装htop1.1更新包列表1.2 安装htop 二、在CentOS/RHEL上安装htop2.1.启用EPEL仓库2.2 安装htop 三、在Fedora上安装htop3.1.安装htop 四…

GraphRAG+ollama+LM Studio+chainlit

这里我们进一步尝试将embedding模型也换为本地的,同时熟悉一下流程和学一些新的东西 1.环境还是用之前的,这里我们先下载LLM 然后你会在下载nomic模型的时候崩溃,因为无法搜索,无法下载 解决办法如下lm studio 0.2.24国内下载…

升级pnpm 升级node.js 解决安装nodejs多版本时显示 is not yet released or available

第一部分:升级pnpm 1、使用命令查看本地安装的pnpm版本 pnpm -v2 使用命令安装指定版本的pnpm npm install -g pnpm8.9.0也可以使用以下命令安装最新版本的pnpm: npm install -g pnpmlatest安装后可以使用pnpm -v 查看是否升级成功 第二部分:升级n…

非线性支持向量机(SVM)

理论知识推导 支持向量机(SVM)是一种用于分类和回归分析的监督学习模型。在处理非线性数据时,线性SVM可能无法很好地分离数据。为了解决这个问题,我们使用核函数将低维空间的非线性数据映射到高维空间,使得在高维空间…

邵楠:数据湖存储的现状和未来趋势

近几年数据湖的概念非常火热,但是数据湖的定义并不统一,我们先看下数据湖的相关定义。 Wikipedia对数据湖的定义: 数据湖是指使用大型二进制对象或文件这样的自然格式储存数据的系统。它通常把所有的企业数据统一存储,既包括源系…

生产力工具|Endnote 21 Macwin版本安装

一、软件下载: (一)mac版本 Endnote 21版本下载:点击下载 Endnote 20版本下载:点击下载 Endnote X9版本下载:点击下载 (二)Endnote 20 Win版本 第一步:安装好官网软…

分享:一次性查找多个PDF文件,如何根据txt文本列出的文件名批量查找指定文件夹里的文件,并复制到新的文件夹,不需要写任何代码,点点鼠标批量处理一次性搞定

简介: 该文介绍了一个批量查找PDF文件(不限于找PDF)的工具,用于在多级文件夹中快速查找并复制特定文件。用户可以加载PDF库,输入文件名列表,设置操作参数(如保存路径、复制或删除)及…

树莓派4B从装系统raspbian到vscode远程编程(python)

1、写在前面 前面用的一直是Ubuntu系统,但是遇到一个奇葩的问题: 北通手柄在终端可以正常使用,接收到数据 但在python程序中使用pygame库初始化时总是报错:Invalid device number,检测不到手柄 经过n次重装系统&am…

【.NET全栈】ASP.NET开发Web应用——计算器

文章目录 一、简单计算器二、复杂计算器 一、简单计算器 新建Web应用项目&#xff0c;窗体页面 窗体设计代码&#xff1a; <% Page Language"C#" AutoEventWireup"true" CodeBehind"Default.aspx.cs" Inherits"AdoDemo.Default"…

打造智慧图书馆:AI视频技术助力图书馆安全与秩序管理

一、背景需求 随着信息技术的飞速发展&#xff0c;图书馆作为重要的知识传播场所&#xff0c;其安全管理也面临着新的挑战。为了确保图书馆内书籍的安全、维护读者的阅读环境以及应对突发事件&#xff0c;TSINGSEE青犀旭帆科技基于EasyCVR视频监控汇聚平台技术与AI视频智能分析…

《0基础》学习Python——第十九讲__爬虫\<2>

一、用get请求爬取一般网页 首先由上节课我们可以找到URL、请求方式、User-Agent以及content-type 即&#xff1a;在所在浏览器页面按下F12键&#xff0c;之后点击网路-刷新&#xff0c;找到第一条双击打开标头即可查看上述所有内容&#xff0c;将上述URL、User-Agent所对应的…

WGS84经纬度坐标 GCJ02火星坐标 BD09百度坐标互相转换

WGS84经纬度坐标 GCJ02火星坐标 BD09百度坐标互相转换 背景&#xff1a;uniapp做的微信小程序&#xff0c;使用到了相机拍照并获取位置坐标信息&#xff1b;在腾讯地图上展示坐标点位置信息&#xff1b; 由于业务需要我们的PC端用的不是腾讯地图&#xff0c;需要使用WGS84坐标或…

目标检测 | YOLO v1、YOLO v2、YOLO v3与YOLO v3 SPP理论讲解

☀️教程&#xff1a;霹雳吧啦Wz ☀️链接&#xff1a;https://www.bilibili.com/video/BV1yi4y1g7ro?p1&vd_sourcec7e390079ff3e10b79e23fb333bea49d 一、YOLO v1 针对于two-stage目标检测算法普遍存在的运算速度慢的缺点&#xff0c;YOLO创造性的提出了one-stage目标检测…

Jupyter notebook如何快速的插入一张图片?如何控制插入图片的缩放、靠左展示(ChatGPT)

在Jupyter Notebook中&#xff0c;你可以使用Markdown语法快速插入图片&#xff0c;并且可以通过HTML标签来控制图片的展示方式和缩放。 注意&#xff1a;以下所有操作都有一个前提&#xff0c;即选择Cell-CellType-Markdown 1. 快速插入图片 要在Jupyter Notebook中插入图…

【Langchain大语言模型开发教程】模型、提示和解析

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、使用Langchain实例化一个LLM的接口 2、 使用Langchain的模板功能&#xff0c;将需要改动的部分抽象成变量&#xff0c;在具体的情况下替换成需要的内容&#xff0c;来达到模板复用效…

JavaEE (1)

web开发概述 所谓web开发,指的是从网页中向后端程序发送请求,与后端程序进行 交互. 流程图如下 Web服务器是指驻留于因特网上某种类型计算机的程序. 可以向浏览器等Web客户端提供文档&#xff0c;也可以放置网站文件&#xff0c;让全世界浏览&#xff1b; 它是一个容器&…

新时代:让中药煎制自动化、信息化

新时代&#xff1a;让中药煎制自动化、信息化 现代医疗领域&#xff0c;科技创新始终在为传统医疗服务带来革命性的改进。某行业医疗巨头&#xff0c;一家拥有国家专利100多项的创新型企业&#xff0c;不仅推出了多款中药煎药包装设备&#xff0c;还自主研发了一系列医疗健康体…

tailwindcss——vscode好用的插件

tailwindcss极大的减少了css的书写&#xff0c;提升了开发效率。这个插件也特别好用。 Tailwind CSS IntelliSense

【电子数据取证】关于CoblatStrike的流量特征取证分析

文章关键词&#xff1a;电子数据取证、流量分析、流量取证 一、前言 近期&#xff0c;网络安全团队在对公司内部网络进行安全检查时发现&#xff0c;有五台电脑出现了不明的网络流量。这些电脑并没有执行任何明显的操作&#xff0c;但是网络流量却显示它们正在向外传输数据。…

如何使用 Java 框架监控和反馈持续交付状态

如何使用 Java 框架监控和反馈持续交付状态 在持续交付 (CD) 流程中&#xff0c;及时监控和反馈是至关重要的。通过实时获取有关构建、部署和测试的反馈&#xff0c;团队可以迅速发现并解决问题&#xff0c;从而改善软件质量和缩短交付周期。 Java 框架 Java 生态系统提供了…