如何自定义数据集

pytorch读取图片,主要是通过Dataset类。

Dataset类源代码如下:

class Dataset(object):"""An abstract class representing a Dataset.All other datasets should subclass it. All subclasses should override``__len__``, that provides the size of the dataset, and ``__getitem__``,supporting integer indexing in range from 0 to len(self) exclusive."""def __getitem__(self, index):raise NotImplementedErrordef __len__(self):raise NotImplementedErrordef __add__(self, other):return ConcatDataset([self, other])

这个类中最核心的就是getitem函数,上面介绍中写的是这个函数提供一个合理范围内的index。我们在自己定义数据集的时候,在这个类中,我们一般是定义这个函数的功能是接受一个index,然后返回图片数据和标签。所以在这个函数中,需要包含打开图片的函数和获取图片lable的语句

getitem函数接受的是一个index,这个index通常指的是一个list中index,这个list中的每个元素就是对应的每个图片的文件路径和标签。

所以在读取自己数据的时候基本流程就是这样的:
首先制作图片存储路径和标签信息的txt
然后将这个信息转化为list
通过这个list中的index,使用getitem函数,我们获取对应的图片数据和标签信息

现在问题是如何制作这个一个list。这个东西我们一般是外部制作就好,保存为一个txt格式就好

然后我们制作一个Dataset子类

class MyDataset(Dataset):def __init__(self, txt_path, transform = None, target_transform = None):fh = open(txt_path, 'r')imgs = []for line in fh:line = line.strip()words = line.split()imgs.append((words[0], int(words[1]))) # words[0]是路径 words[1]是类别数self.imgs = imgs        # 最主要就是要生成这个list, 然后DataLoader中给index,通过getitem读取图片数据self.transform = transformself.target_transform = target_transformdef __getitem__(self, index):fn, label = self.imgs[index]img = Image.open(fn).convert('RGB')     # 像素值 0~255,在transfrom.totensor会除以255,使像素值变成 0~1if self.transform is not None:img = self.transform(img)   # 在这里做transform,转为tensor等等return img, labeldef __len__(self):return len(self.imgs)

注意看我自己定义的类,在初始化函数中,我通过对txt文件的读取,得到了一个list,也就是self.imgs

然后在__getitem__ 函数中,通过index,我们得到文件路径和lable,然后使用open函数,将图像文件打开并转化为RGB数据,同时进行一些相应的转化

这个部分建立好了,其实自定义数据集基本就好了,因为接下来的操作就交给了DataLoder,代码基本不需要变化。

我现在有一个思考,就是说上面我说的图像数据,如果是文本数据呢?我如何进行自定义数据呢?

转载于:https://www.cnblogs.com/lzida9223/p/10536165.html

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

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

相关文章

在后SCI时代需要什么样的人才?

来源:秦四清科学网博客。链接地址:http://blog.sciencenet.cn/blog-575926-1302503.html近些年,国家陆续出台了一系列破“五唯”举措,这标志着后SCI 时代的到来。大家知道,创新是引领发展的第一驱动力,而创…

OpenGL之纹理过滤(Texture Filtering)、MipMap方法、纹理坐标

1.1 纹理过滤 像素、片元都是具有面积的,一个像素可能对应物体上的一小块区域,而物体上这个小区域对应于纹理图像上的一个小区域,因此一个像素的颜色可能来自于纹理中的一小个不规则区域,如果纹理的分辨率比较高,则这…

转 关于window10安装jdk,配置环境变量,javac不是内部或外部命令,也不是可运行的程序 或批处理文件的细节问题。...

今日拿到一台新的window10笔记本电脑,非常熟练的安装了JDK(因为在学校经常给同学安装JDK - -)但是发现java java -version命令都可以使用,唯独javac命令出现不是内部或外部命令,也不是可运行的程序或批处理文件。出现这…

OpenGL之环境映射

1.1 环境映射(Environment Mapping) 具有光滑表面的物体会反射形成周围环境的影响,是一种环境光效果。 光线跟踪等(全局光照)可以实现这种效果,但是效率太低,可以采用环境映射技术就能快速实现。 1.2 环境映射技术 …

Nature对数千篇论文提出质疑:隐藏的细菌蛋白为自然界的“电网”提供动力

隐藏在细菌中的蛋白质在缺乏氧气的时候泵出纳米线,这本质上是“呼出”电子来源:耶鲁大学Nikhil Malvankar耶鲁大学的研究人员在《自然》杂志上报告说,一种隐藏在细菌内部的毛发状蛋白质充当了自然界“电网”的某种开关,“电网”是由细菌产生的…

Hadoop之Shell脚本自动启动

在用Hadoop进行大数据分析处理时,通常配置的服务器不止一两台。为了减少人工操作的重复性,所以hadoop提供了可以自动启动Hadoop集群的Shell脚本。在使用Shell脚本启动集群之前,需要进行相应的配置。 说明:$HADOOP_HOME/root/proje…

TCP的拥塞控制机制

拥塞: 在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,产生拥塞若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下…

光刻机:半导体工业最耀眼的明珠

来源:胖福的小木屋原标题:《世界上所有半导体企业都离不开的光刻机是什么,一口气带你搞懂》光刻机是在半导体领域必不可少的设备,无论生产制造什么样的芯片,都脱离不了光刻机,如果说航空发动机代表了人类科…

ubuntu-18.04 修改用户名密码

1. 开放root登录 设置root密码 $ sudo passwd root切换到root 用户 $ sudo -i修改/etc/pam.d/gdm-autologin $ vim /etc/pam.d/gdm-autologin  注释所圈行修改/etc/pam.d/gdm-password $ vim /etc/pam.d/gdm-password  同样注释所圈行修改/root/.profi…

网络层的基本概念

网络层的功能 网络层负责实现各种不一样的物理网络的互联 网络层采用分组交换技术网络层应当使用统一编址路由器使用存储转发实现异构网络的互联网络层关注分组从一个网络到达另一个网络的选路问题 资源子网与通信子网 资源子网 负责全网的数据处理业务,向网络…

JS高级学习笔记(6)- 事件循环

参考文章:深入理解JS引擎的执行机制 JavaScript 异步、栈、事件循环、任务队列 我的笔记:ES系列之Promise async 和 await Event Loop 前提 js是单线程的 js的Event Loop是JS的执行机制,深入了解JS的执行,就等于深入了解JS里的event …

[美]杰克·巴尔金:算法社会中的三大法则

杰克巴尔金:耶鲁大学奈特宪法与第一修正案讲席教授,耶鲁大学法学院信息社会项目主任。来源:数字法治译者:刘颖,同济大学法学院助理教授、硕士生导师,法学博士。陈瑶瑶,上海大学法学院硕士研究生…

Vue快速入门笔记(一)

文章目录一、Vue基础1、第一个Vue程序2、el:挂载点3、data:数据对象二、模板语法1、v-once2、v-html3、v-bind4、v-text5、v-on三、计算属性和侦听器1、计算属性2、侦听器四、Class与Style绑定1、绑定HTML Class2、绑定内联样式五、条件渲染1、v-if2、v-…

CentOS7完成mysql的安装和远程访问

详见链接https://blog.csdn.net/weixin_42266606/article/details/80879571 (此处我的本地用户名root,密码root;远程用户名root,密码12345) 1.下载 MySQL 所需要的安装包 网址:https://dev.mysql.com/downloads/mysql/ 2.Select O…

维特根斯坦:为何夸大人工智能是对人性的贬损?

© Semantics3来源:利维坦文:Steven Gambardella译:苦山校对:兔子的凌波微步原文:medium.com/stevengambardella/wittgenstein-intelligence-is-never-artificial-51933315d1bd利维坦按:众所周知&#…

哔哩哔哩n倍速播放视频

在b站看一些学习视频的时候,有时候2倍速满足不了我们的需求,可以在控制台键入以下命令实现n倍速播放视频 document.querySelector(video).playbackRate 3

虚拟机的ip地址为什么会发生变化

因为虚拟机在NAT模式下由Vmware8虚拟网卡提供虚拟机的IP分配,网桥模式下由Vmware1来提供IP分配。它们都相当于 一个小型的DHCP服务器,除非改动虚拟机的网络连接方式,或动了虚拟网卡服务属性,那么虚拟机的IP租约过期后,…

法国数学到底有多厉害?

来源:盘古论市、EETOP等引子在德国数学家高斯的一部传记中,作者引用了下面这段话:有一个异乡人在巴黎问当地人,“为什么贵国历史上出了那么多伟大的数学家?”巴黎人回答,“我们最优秀的人学习数学。”又去问…

DevExpress破解和消除弹出框问题

在解决方案管理器列表中找到 license.licx 设置属性 将[生成操作]选项改为[无] 转载于:https://www.cnblogs.com/sinceret/p/10556243.html

Linux下进入Anaconda Prompt以及Navigator

同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 一、进入Anaconda Promp 打开终端,cd 进Anaconda下的bin目录 conda activate退出 conda deactivate二、进入Anaconda Navigator anaconda-navigator