当前位置: 首页 > news >正文

dataset__getitem___PyTorch 之Dataset和DataLoader

3610e690e4bc23d2b8feece067435623.png

介绍

在处理任何机器学习问题之前都需要数据读取,并进行预处理。Pytorch提供了许多方法使得数据读取和预处理变得很容易。

1.torch.utils.data.dataset这样的抽象类可以用来创建数据集。学过面向对象的应该清楚,抽象类不能实例化,因此我们需要构造这个抽象类的子类来创建数据集,并且我们还可以定义自己的继承和重写方法。

2.这其中最重要的就是lengetitem这两个函数,前者给出数据集的大小,后者是用于查找数据和标签。

3.torch.utils.data.DataLoader是一个迭代器,方便我们去多线程地读取数据,并且可以实现batch以及shuffle的读取等。

Dataset的创建和使用

import 
<__main__.subDataset object at 0x7f190be69150>
dataset大小为: 4
(tensor([1., 2.]), tensor([0], dtype=torch.int32))
(tensor([1., 2.]), tensor([0], dtype=torch.int32))

代码中写了关键步骤的详细解释

但值得注意的地方是:

class subDataset(Dataset.Dataset):

如果只写了Dataset而不是Dataset.Dataset,则会报错:module.init() takes at most 2 arguments (3 given)

2fa54bdad960892af9d2d63f7fb60446.png

因为Dataset是module模块,不是class类,所以需要调用module里的class才行,因此是Dataset.Dataset!

DataLoader的创建和使用

import torch
import torch.utils.data.dataset as Dataset
#引入DataLoader:
import torch.utils.data.dataloader as DataLoader
import numpy as np
 
Data = np.asarray([[1, 2], [3, 4],[5, 6], [7, 8]])
Label = np.asarray([[0], [1], [0], [2]])
#创建子类
class subDataset(Dataset.Dataset):
    #初始化,定义数据内容和标签
    def __init__(self, Data, Label):
        self.Data = Data
        self.Label = Label
    #返回数据集大小
    def __len__(self):
        return len(self.Data)
    #得到数据内容和标签
    def __getitem__(self, index):
        data = torch.Tensor(self.Data[index])
        label = torch.IntTensor(self.Label[index])
        return data, label
 
if __name__ == '__main__':
    dataset = subDataset(Data, Label)
    print(dataset)
    print('dataset大小为:', dataset.__len__())
    print(dataset.__getitem__(0))
    print(dataset[0])
 
    #创建DataLoader迭代器
    #创建DataLoader,batch_size设置为2,shuffle=False不打乱数据顺序,num_workers= 4使用4个子进程:
    dataloader = DataLoader.DataLoader(dataset,batch_size= 2, shuffle = False, num_workers= 4)
    #使用enumerate访问可遍历的数组对象:
    for i, item in enumerate(dataloader):
        print('i:', i)
        data, label = item
        print('data:', data)
        print('label:', label)
<__main__.subDataset object at 0x7fc08d46cdd0>
dataset大小为: 4
(tensor([1., 2.]), tensor([0], dtype=torch.int32))
(tensor([1., 2.]), tensor([0], dtype=torch.int32))
i: 0
data: tensor([[1., 2.],
        [3., 4.]])
label: tensor([[0],
        [1]], dtype=torch.int32)
i: 1
data: tensor([[5., 6.],
        [7., 8.]])
label: tensor([[0],
        [2]], dtype=torch.int32)

可以看到两个对象,因为对象数*batch_size就是数据集的大小len

相关文章:

  • java 读取txt内容_不用怀疑!这就是把Java.I/O流讲解的最清楚的一篇文章
  • 表单所有input框置灰_别再对 Angular 表单的 ControlValueAccessor 感到迷惑
  • 要求的函数不受支持_支持向量机:如何对不可分数据进行分类?
  • java 内存泄漏_Java应用程序中的内存泄漏及内存管理
  • python制作网页样式_HTML基础做出属于自己的完美网页
  • using在sql中是什么意思_知否 | “开到荼蘼”的“荼蘼”是什么东西?
  • python如何导入数据库生成图表_python数据库操作常用功能使用详解(创建表/插入数据/获取数据)...
  • python pip3 freeze_Python系列之包管理工具【pip3】
  • python元组倒序排列_python序列(列表,元组,字典)的常用排序
  • python k线顶分型_顶分型和底分型的确认及K线包含处理
  • oracle大量删除数据之后索引是否需要重建_深入浅出索引
  • python3.70_Python 2.7 辛苦了,你好Python 3.7
  • 内存分段分页机制理解_20 张图揭开「内存管理」的迷雾,瞬间豁然开朗
  • wpf项目无法使用针式打印机_针式打印机630K常见问题及解决方法
  • 控制网页frame vba_VBA网络通信基础
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Android 控件背景颜色处理
  • CSS 三角实现
  • css属性的继承、初识值、计算值、当前值、应用值
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript设计模式与开发实践系列之策略模式
  • MySQL数据库运维之数据恢复
  • scrapy学习之路4(itemloder的使用)
  • WePY 在小程序性能调优上做出的探究
  • 半理解系列--Promise的进化史
  • 前端性能优化——回流与重绘
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 异步
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • #预处理和函数的对比以及条件编译
  • $ git push -u origin master 推送到远程库出错
  • (2.2w字)前端单元测试之Jest详解篇
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (二)斐波那契Fabonacci函数
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (算法二)滑动窗口
  • (一)80c52学习之旅-起始篇
  • (转)大型网站架构演变和知识体系
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • *上位机的定义
  • .net core使用ef 6
  • .net反编译工具
  • .net下的富文本编辑器FCKeditor的配置方法
  • ::什么意思
  • @ModelAttribute注解使用
  • @RequestBody的使用
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [bzoj2957]楼房重建
  • [C进阶] 数据在内存中的存储——浮点型篇