深度学习 -- Pytorch学习 数据集API Dataset与DataLoader 重载鸢尾花数据集

news2024/9/29 23:29:36

前言

在模型训练的步骤中,数据的部分非常重要,它的过程主要分为数据收集、数据划分、数据读取、数据预处理。

数据收集的有原始样本标签(Img,label)

数据集的划分需要分为训练集、验证集、测试集。
训练集负责训练模型,验证集负责验证模型是否过拟合,测试集是用来测试性能的。

数据读取主要就是DataLoader的内容

  • DataLoader分为两个子模块,分别是Sampler和DataSet
    Sampler的功能是生成索引(Index)
    DataSet则是根据索引来读取数据

数据预处理需要用transforms来实现

自定义数据集类

PyTorch的自定义数据集可使用Dataset类、IterableDataset类来定义,前者用于实现Map-style(映射风格)的数据集,后者用于实现迭代风格的数据集。

DataLoader 和 Dataset

DataLoader 和 Dataset是pytorch数据读取的核心

Dataset

torch.utils.data.Dataset
功能:Dataset抽象类,所有自定义的Dataset需要继承它,并且复写__ getitem __()

getitem:
接收一个索引,返回一个样本

在这里插入图片描述

使用Dataset类重载鸢尾花数据集

import numpy as np
import torch
from torch.utils.data import Dataset
import numpy as np

class IrisDataset(Dataset):
    '''鸢尾花数据集'''
    def __init__(self):
        super(IrisDataset).__init__()
        data = np.loadtxt()("鸢尾花数据集路径.csv",delimiter=',',dtype=np.float32)
        self.x = torch.from_numpy(data[:,0:-1])
        self.y = torch.from_numpy(data[:,[-1]])
        self.len = data.shape[0]
        
    def __getitem__(self, index):
        return self.x[index],self.y[index]
    
    def __len__(self):
        return self.len



DataLoader

torch.utils.data.DataLoader

实现自定义数据集之后,就可以返回数据集样本了,但这种直接通过索引来返回样本的方式比较原始,无法让数据集一次提供一个批次(batch)的数据,也无法对数据进行随机置乱和并行加速。为此,PyTorch专门提供DataLoader类来实现这一功能。

DataLoader类是一个数据加载器,它将数据集和样本抽样器组合在一起,并提供给定数据集上的可迭代对象。

功能:构建可跌倒的数据装载器

在这里插入图片描述

  • dataset:Dataset类,决定数据从哪读取及如何读取
  • batchsize:批大小
  • num_works:是否多进程读取数据
  • shuffle:每个epoch是否乱序
  • drop_last:当样本数不能被batchsize整除时,是否舍弃最后一批数据

Epoch:所有训练样本都一输入到模型中,称之为一个Epoch
Iteration:一批样本输入到模型中,称之为一个Iteration
Batchsize:批大小,决定一个Epoch有多少个Iteration

DataLoader类的简单示例

我们以读取上面构建的鸢尾花数据集为例

import torch
from torch.utils.data import DataLoader
from Dataset类重载鸢尾花数据集 import IrisDataset

# 实例化
iris = IrisDataset()
irir_loader = DataLoader(dataset=iris,batch_size=10,shuffle=True)

for epoch in range(2):
    for i,data in enumerate(irir_loader): # Return an enumerate object.
        # 从irir_loader中读取数据
        inputs,labels = data
        # 打印数据集
        print(inputs.data.size())
        print(labels.data.size())

数据读取的三个问题

1、读哪些数据?

训练用的数据

2、从哪读数据?

数据集中

3、怎么读数据?

通过os库对硬盘上的文件读取

if __name__ == '__main__':
	random.seed(1)

	dataset_dir = ps.path.join('..','data')
	split_dir = ps.path.join('..','split')
	train_dir = os.path.join(split_dir,'train')
	valid_dir = os.path.join(split_dir,'valid')
	test_dir = os.path.join(split_dir,'test')
	
	train_pct = 0.8
	valid_pct = 0.1
	test_pct = 0.1

构建MyDataset实例

train_data = MyDataset(data_dir=train_dir,transform=train_transform)
valid_data = MyDataset(data_dir=train_dir,transform=valid_transform)

构建DataLoder

train_loader = DataLoader(dataset=train_data,batch_size=tensor(32,32),shuffle=True)
valid_loader = DataLoader(dataset=valid_data,batch_size=tensor(32,32))

在这里插入图片描述

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

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

相关文章

C++基础知识快速入门

目录 一, 命名空间 1.1命名空间使用命名空间中成员该如何使用呢? 1.2 命名空间其他2种使用方式: 1. using 将其中一个成员引入 2. using namespace 二,C输入&输出 (简单运用) 2. 1 头文件 2. 2 cout 与 …

2023年软件测试常见面试题100%问必背全套教程

随着数字化时代的到来,软件测试越来越受到重视。在未来的几年里,软件测试将继续成为信息技术领域中的热门职业之一。如果你是一名正在寻找或准备进入软件测试行业的人,那么这套常见面试题全套教程对你来说会非常有用。 这套教程旨在帮助你了…

MySQL主从同步配置

Mysql 主从同步原理 就是基于数据库里面的那个 binlog 文件进行数据同步 具体步骤: step1:master将数据改变记录到二进制日志(binary log)中。step2: 当slave上执行 start slave 命令之后,slave会创建一个…

Unity 后处理(Post-Processing) -- (2)创建后处理配置文件

通过前面一小节,我们初步认识了后处理是什么,在Unity中简单的试了试后处理的效果。本节我们来创建一个我们自己的后处理配置文件(post-processing profile)。 一个后处理配置文件包含了一系列为了达到特定视觉效果的后处理效果的配…

C51 - DS18B20

Thermometer 1> 实验概述2> 硬件设计3> DS18B204> 单总线(1-Wire)通讯协议4.1> 复位时序4.2> 写-DS18B20时序4.3> 读-DS18B20时序4.4> 命令 5> 程序设计5.1> 编程思路5.2> 代码实现 6> 联调测试 1> 实验概述 实现…

Redis集合底层实现原理

目录 本章重点简单动态字符串SDS集合底层实现原理zipListlistPackskipListquickListKey 与Value中元素的数量 本章重点 掌握Redis简单动态字符串了解Redis集合底层实现原理 简单动态字符串SDS SDS简介 我们Redis中无论是key还是value其数据类型都是字符串.我们Redis中的字符…

从入门到精通:30天速成黑客教程到底有多狠?

首先我谈下对黑客&网络安全的认知,其实最重要的是兴趣热爱,不同于网络安全工程师,他们大都是培训机构培训出来的,具备的基本都是防御和白帽子技能,他们绝大多数的人看的是工资,他们是为了就业而学习&am…

ShardingSphere学习笔记

目录 1. 概述 1.1 分库分表是什么 1.2 分库分表方式 1.2.1 垂直分表 1.2.2 垂直分库 1.2.3 水平分库 1.2.4 水平分表 1.3 小结 1.3 分库分表带来的问题 1.3.1 事务一致性问题 1.3.2 跨节点关联查询 1.3.3 跨节点分页、排序函数 1.3.4 主键避重 1.3.5 公共表 2. …

JavaSE基础(二)—— 类型转换、运算符、键盘录入

目录 一、类型转换 1. 自动类型转换 1.1 自动类型转换的底层原理: ​1.2 自动类型转换的其他形式​编辑 2. 表达式的自动类型转换 3. 强制类型转换 3.1 强制类型转换底层原理​编辑 3.2 注意事项 二、运算符 1. 算数运算符 1.1 案例:数值拆分…

【群智能算法】一种改进的哈里斯鹰优化算法 IHHO算法[1]【Matlab代码#17】

文章目录 1. 原始HHO算法2. 改进的哈里斯鹰优化算法2.1 动态自适应逃逸能量E2.2 拉普拉斯交叉算子2.3 动态自适应权重 3. 部分代码展示4. 仿真图展示5. 资源获取 1. 原始HHO算法 详细介绍此处略,可参考HHO算法介绍 2. 改进的哈里斯鹰优化算法 2.1 动态自适应逃逸…

【算法】刷题中的位运算

作者:指针不指南吗 专栏:算法篇 🐾人类做题的过程,其实是暴搜的过程🐾 文章目录 1.位运算概述2.位运算符3.位运算应用3.1整数的奇偶性判断3.2有关 2 的幂的应用3.3lowbit(x)返回x的最后一位13.4二进制数中1的个数3.5求…

6.S081——陷阱部分(一篇读懂Xv6系统调用)——xv6源码完全解析系列(5)

0.briefly speaking 这篇博客将要开始尝试阅读和研究与Xv6陷阱机制相关的代码,主要有以下文件,最重要的是结合Xv6 book将Xv6处理陷阱的相关逻辑和流程弄透。在Xv6的语境中所谓陷阱的触发有以下三种情况: 系统调用严重错误(比如除…

设备仪器仪表盘读数识别算法 yolov5

设备仪器仪表盘读数识别系统基于YoLov5网络模型分析技术,设备仪器仪表盘读数识别算法模型自动识别指针型仪表读数。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测,核心思想就是利用整张图作为网络的输入,直接在输出层回归 bounding…

【Maven笔记2】Maven安装与配置

1、前置准备 maven是使用Java语言进行开发的,因此在安装maven之前,先需要有java运行环境。如何确认本机是否安装了JDK环境呢?打开终端运行如下命令: java -version如下图显示说明已经安装了JDK环境。 备注:如何安装J…

Intel Xeon(Ice Lake) Platinum 8369B阿里云CPU处理器

阿里云服务器CPU处理器Intel Xeon(Ice Lake) Platinum 8369B,基频2.7 GHz,全核睿频3.5 GHz,计算性能稳定。目前阿里云第七代云服务器ECS计算型c7、ECS通用型g7、内存型r7等规格均采用该款CPU。 Intel Xeon(Ice Lake) Platinum 8369B Intel …

OSI七层网络参考模型

七层模型的诞生 深夜中,在一家美国酒吧坐着几个正在谈论迪斯尼电影里的7个小矮人,他们把小矮人的名字写在餐巾纸上,有人开玩笑说7对于网络分层是个好数字,这几个人就是制定OSI标准小组的成员,后来OSI真的就设计成了七…

TensorFlow入门图像分类-猫狗分类-MobileNet优化

在上一篇文章中《Tensorflow入门图像分类-猫狗分类-安卓》,介绍了使用TensorFlow训练一个猫狗图像分类器的模型并在安卓应用上使用的全过程。 在这一篇文章中,将采用 MobileNet 来重新训练一个猫狗图像分类器。 一、 MobileNet 介绍 MobileNet是一种轻量…

服务(第十六篇)mysql①基础

什么是数据库? 数据: ①描述事物的符号记录称为数据(Data),数字、文字、图形、图像、声音、档案记录等; ②数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。 行&#xf…

35岁以10亿美元身价登上《财富》杂志亿万富豪榜的电商传奇谢家华

Zappos的介绍 Zappos可谓是电商的传奇,国内同类电商是乐淘。Zappos是一家在线卖鞋和服装的公司,1999年创立,2009年被亚马逊以12亿元收购, 多次入选财富杂志最佳雇主公司top100。 Zappos的创始人及CEO 提到Zappos就不得不介绍下…

SQL知识汇总

什么时候用存储过程合适 当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更改等)要考虑&#xff1b…