python数据处理常用函数_pytorch中的自定义数据处理详解

pytorch在数据中采用Dataset的数据保存方式,需要继承data.Dataset类,如果需要自己处理数据的话,需要实现两个基本方法。

:.getitem:返回一条数据或者一个样本,obj[index] = obj.getitem(index). :.len:返回样本的数量 。 len(obj) = obj.len()。

Dataset 在data里,调用的时候使用

1

2

3

from torch.utilsimport data

import os

from PILimport Image

数据在调用getitem的时候才会读取图片数据,如果需要可以修改成自己的getitem函数,根据自己的数据集来设定,比如

1

2

3

4

5

6

7

8

9

10

def _getitem_(self,index):

img_path=self.imgs[index];##这里理解是加载了所有图像的路径,封装成自身的格式

labels=[]##根据自己的格式进行处理

pil_img=Image.open(img_path);##根据上面封装好的格式进行读取

array=np.array(pil_img);##将读取的图像转成array数据表示的格式

data=t.from_numpy(array)#转成Tensor格式,方便后面网络操作

return data,label;

def _len_(self):

return len(self.imgs);###imgs是一个绝对路径

在主函数里调用的时候,只需使用

1

2

3

4

dataset=Dataset('')##或者调用自定义的数据处理类

data,label=dataset[0];##相当于调用了dataset.__getitem__(0)

for img,labelin dataset:##里面也是以字典形式存放

print(img.size(),imf.float().mean(),label);

采用Dataset的缺点在于实际中图像的大小不一,对数据处理中很不友好,其次数据太大,容易造成溢出,需要进行归一化,因此torchvision提供了transforms模块对Image进行和Tensor进行操作。

对PIL_Image的常见操作:

Scale,调整图像尺寸。centerCrop:randomcrop:randomsizecrop:裁剪图片

pad:填充

ToTensor:将Image图像转化成tensor,并自动归一化到[0,1]

对Tensor的常见操作:

Normalize:标准化,减去均值,除以标准差。 ToPILImage:将Tensor转变成PILImage格式,可以方便后续的可视化。

—————————我是分割线—————————

上面介绍了需要自定义的数据处理方法,pytorch早封装好了比较常用方便的方法.

transforms中的ImageFolder, 该类的好处是,所有文件按照类别进行保存,文件名就是类别名,不需要另外再生成label.txt了,也不需要像上面预处理下Label,该类会自动生成标签,构造函数如下:

ImageFolder(root,transform= None,target_transforms=None,loader=default_loader) ##其中root指定路径,transform:对PIL_Image进行转换操作,输入参数是loader的返回对象。target_transform:是label的转换,loader:是指定加载图片的函数,默认操作是读取为PIL_Image对象。

通过该函数得到的Lable按照文件夹名顺序排序后形成字典的,比如{类名:序号从0开始}

,一般最好把文件夹命名为从0开始的数字,和Imageloader的实际的Lable一致,如果不是,可以通过self.class_to_ids来查看你得到的数据的映射关系,比如你的文件夹是cat和dog,那么loader就是自动从0开始标签,self.class_to_ids得到的就是{‘cat':0,'dog':1}。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

dataset=ImageLoader('root');

dataset.imgs##返回图片路径和对应的标签

dataset[5][1] ;##返回第5张图的标签

dataset[5][0];##返回第5张图的图像数据,显示出来的就是一副图像,这时候并没有转成Tensor格式,所以需要手动转换

dataset[0][0].size();##输出第一个图像的大小

##得到的结果如下,表示该图像是3通道,大小为224*224

[3,224,224];

###定义一个transform,对数据进行各种预处理。

mytransform=T.Compose([

randomSize;

T.ToTensor(),##重点是要记得转成Tensor格式

normlize;

]);

dataset=ImageLoader('root',transform=mytransform);

调用ImageLoader把读取的图像转成dataset存储后,再使用DataLoader对上面得到的图像tensor数据进行抽样,打乱和分批次操作,操作格式如下:

1

DataLoader(dataset,batch_size,shuffle=False,sampler=None,num_workers=0,collate_fn=default,pin_memory=False,drop_last=False);

其中:

dataset:加载得到的dataset对象,就是上面得到的DataSet和ImageLoader得到的对象(ImageLoader需要进行tensor转换后才行)。

batch_size:批处理的大小

shuffle:是否要把数据进行打乱。(这样可以防止连续多个样本都是同一类别)

sampler:样本抽样.会改变本身dataset的大小(可以在不是batch倍数的时候使用)

num_workers:多进程数量,0表示不使用多进程。

collate_fn:一般采用默认的batch拼接方式。

pin_memory;是否将数据保存在pin_memory里,将这的数据转到GPU会快一些。

drop_last:有可能不是batch的整数倍,将不足一个batch的数据丢弃。

dataloader是一个迭代对象,使用方法与一个迭代器相似,例如:

1

2

for batch_data, batch_labelin dataloader:

##是按照一batch的数量进行拼接的,以每batch进行迭代。

--------torchvision数据处理和可视化常用工具--------------

models:保存了训练好的模型

datasets:保存了数据集,主要包括minist,imagenet等

transforms:提供常用的数据预处理操作。

make_grid: make_grid(dataloader[0],4):将第一个batch的图像拼接成4*4网格

save_image:直接将tensor格式的数据保存成图像

tensorboard是tensorflow框架使用的,但是也有针对pytorch的Tensorboardx,能读取数据并进行可视化,使用比tensorflow的更加方便,本文主要介绍另外一种工具visdom,pytorch的专属可视化工具,支持数据,图像,文本,视频的显示。visdom有以下两种概念:

env:环境,默认使用Main环境,不同用户的环境可能不同,需要专门指定。

pane:窗格,用于进行可视化,可以拖放,缩放和保存关闭,可以多个显示。

可以使用pip install visdom直接进行安装,在使用visdom的时候需要注意,保存时候需要手动指定保存的env,其次客户端和服务端之间交互采用tornado框架,不会受其他程序的影响。visdom需要使用nohup python -m visdom.server命令启动,放在后台运行。

1

2

3

4

5

6

import visdom

vis=visdom.Visdom(env=u'test');指定一个环境,新建一个客户端,还可以指定host和端口

x=;

y=;

vis.line(X=x,Y=y,win='sinx',opts={'title':'y=sinx'};#画图

-line,-image,-text,-histgram,-scatter,-bar,-pie.

同时支持pytorch的tensor和Numpy结构,但不支持int float类型,vis.updateTrace更新之前的图。

visdom的画图工具可以接受两种,一种是image,接受二维或者三维的,前者是黑白的,后者是彩色图像,Images接受一个4维向量的nch*w,c可以是1或者3,代表黑白或者彩色的,n表示图片的数量。

--------临时记录下已有的Loss函数-------

nn.CrossEntropyLoss(); ##交叉熵函数

nn.MSELoss(); ##均方差函数

nn.NLLLoss()

nn.NLL2dLoss();

loss函数后面再学习。

以上这篇pytorch中的自定义数据处理详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://www.jianshu.com/p/6c8c14707d01

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

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

相关文章

raid重构原理_5个重构原理示例

raid重构原理这篇文章介绍了重构真正的开源代码( Gradle Modules Plugin )时应用的五​​种(最著名的)重构原理。 语境 当我为Gradle Modules Plugin (PR #73 ) 单独编译 module-info.java &am…

extjs ajax 遮罩层,[Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏

前言Load Mask(遮罩)效果,就是在页面还没有完全显示出来之前, 加上一个转装转的效果。类似:添加这样的效果有两个好处:1. 在页面没完全show出来之前, 把后面的页面给遮罩起来, 防止进行一些非法的操作。2. …

macOS下卸载文件系统_卸载移动硬盘_卸载U盘_推出移动硬盘_推出U盘

先使用命令 df -lh 在终端查看当前系统的所有挂载的文件系统(系统硬盘、移动硬盘、U盘等),命令如下: liaowenxiongliaowenxiongdeMacBook-Air ~ % df -h Filesystem Size Used Avail Capacity iused ifree %iused …

python isalnum函数_Python 字符串 (isdigit, isalnum,isnumeric)转

Python isdigit() 方法检测字符串是否只由数字组成。 语法 isdigit()方法语法: str.isdigit() 参数 无。 返回值 如果字符串只包含数字则返回 True 否则返回 False。 Python isdecimal() 方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。 注意:定…

zing jvm_Zing加快了JVM应用程序的预热

zing jvmJava虚拟机(JVM)提供了托管运行时环境,用于安全部署应用程序,其性能通常可以超过本机编译语言(如C和C )。 通过即时(JIT)编译进行垃圾回收和自适应编译的内存管理是两个最突…

黎明觉醒测试服服务器维护怎么办,黎明觉醒测试资格进不去怎么办

黎明觉醒测试资格进不去怎么办?黎明觉醒游戏在在9月16日迎来曙光测试,相信不少玩家都去玩了发现自己进不去游戏,这是怎么回事呢?和小编一起来看看吧。黎明觉醒测试资格进不去怎么办一、测试资格进不去获得测试资格的玩家官方已提前…

查看Linux命令_搜索Linux命令_查找Linux命令

站点1:https://tool.lu/command/ 站点2:https://www.linuxcool.com/

蜂鸣器音乐代码 天空之城_潮玩 | 艺术展览,乐队live现场,网红小黑泥,贩卖“美好”的市集……一场未来公共生活,天空之城和你一起探索!...

第一次打卡这样的新媒体艺术作品,不是画作,也不是艺术品陈列,而是一场看的见的引力交响曲~错落的磁场具象成看得见的流动痕迹,不动声响却震撼的感官体验。很容易让人沉浸其中,去捕捉流动的方向和瞬间。虽然UFO是没看到…

自动部署 管道 ci cd_自动化测试在CI CD管道中的作用

自动部署 管道 ci cd业界广泛采用的软件开发实践:持续集成和持续部署可确保良好地交付产品并经常交付。 常规代码提交需要常规/连续测试,而如果忽略它,则可能导致非弹性基础结构。 如何交付坚固的CI CD管道? 对于许多公司来说&…

Maven的maven-install-plugin插件详解

文章目录将下载到本地的jar文件安装到Maven本地仓库中将当前项目安装到Maven本地仓库中参考maven-install-plugin 插件的作用:1.可以将当前项目安装到 Maven 本地仓库,供本地其它 Maven 项目使用 执行 mvn install 命令将当前项目安装到 Maven 本地仓库…

python字典_Python 字典

1、什么是 dict(字典)上一章节,我们学习了列表(List) 和 元组(tuple) 来表示有序集合。而我们在讲列表(list)的时候,我们用了列表(list) 来存储用户的姓名。name [一点水, 两点水, 三点水, 四点水, 五点水]那么如果我们为了方便联系这些童鞋&#xff0c…

hazelcast_Java:如何在不到5分钟的时间内通过Hazelcast提高生产力

hazelcast如果要使用Hazelcast内存数据网格(IMDG)来加快数据库应用程序的速度,但是要处理数百个表怎么办? 手动编码所有Java POJO和序列化支持将需要数周的工作,完成后,手动维护该域模型将很快成为一场噩梦…

Maven的maven-help-plugin插件详解

执行下面的命令查看指定插件的详细信息: [~/Documents/IdeaProjects/demo02]$ mvn help:describe -Dpluginorg.apache.maven.plugins:maven-site-plugin:3.9.0 -Ddetail上述命令执行的是 maven-help-plugin 的 describe 目标,在参数 plugin 中输入需要描…

android官方文档中文版_最全实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...

点击 机器学习算法与Python学习 ,选择加星标精彩内容不迷路本文转自机器之心在 Github 上一度蝉联最流行的机器学习和数据科学包 NumPy,已经有了非常之系统的中文文档,回想起当初细啃 NumPy 之时,不少人不得不徘徊于各大搜索引擎及…

tls jdk_使用JDK 13查看TLS配置

tls jdkJDK 13 Early Access Build 16现在可用,它带来的有趣的功能之一是能够使keytool命令行工具显示当前系统的TLS配置信息 。 这比尝试在单独的文档中查找受支持的TLS信息并将该信息与自己的JDK供应商和版本进行匹配要容易得多。 要查看JDK 13 Early Access Bui…

执行Plugins下的install:install报错:The packaging for this project did not assign a file to the build artif

文章目录导致错误的原因分析解决方法直接执行生命周期的某个阶段命令阶段和插件目标一起执行参考导致错误的原因分析 在 IDEA 中使用 Plugins 下的 install:install (或者在命令行下执行命令 mvn install:install),代表执行的是 install 插件…

javascript等待异步线程完成_前端:什么是单线程,同步,异步?彻底弄懂 JavaScript 执行机制...

javascript是按照语句出现的顺序执行的。js是一行一行执行的:let a 1;console.log(a);let b 2;console.log(b);然而实际上js是这样的:setTimeout(function(){ console.log(定时器开始啦)});new Promise(function(resolve){ console.log(马上执行for循环…

react回调_回调地狱和React模式

react回调我可以更好地了解a的用途的一种方式 基于React流的方法是它简化了无阻塞IO调用的方式。 这篇文章将快速讲解进行同步远程调用所涉及的那种代码,然后说明如何在非阻塞IO中分层,尽管在资源(尤其是线程)的使用方面非常高效…

Maven插件列表_Maven插件查询_Maven插件查看

Maven 官方插件列表:https://maven.apache.org/plugins/index.html。 Maven 官方插件下载地址:https://repo1.maven.org/maven2/org/apache/maven/plugins/

jsp循环输出表格_「翻译」JS可视化学习之七:Promise、事件循环和异步2

喜欢排队吧,它能保护你的时间和精力 - 排队纪律维护员Event LoopPromise和事件循环概览图请注意上面这张图,Promise和事件循环的那些事,将在这个图上缓缓展开。微任务和(宏)任务好了,(经过上一节对Promise的理解)现在我们对如何创…