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
python数据处理常用函数_pytorch中的自定义数据处理详解相关推荐
- python构造自定义数据包_pytorch中的自定义数据处理详解
pytorch在数据中采用Dataset的数据保存方式,需要继承data.Dataset类,如果需要自己处理数据的话,需要实现两个基本方法. :.getitem:返回一条数据或者一个样本,obj[in ...
- python协程库_python中协程的详解(附示例)
本篇文章给大家带来的内容是关于python中协程的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 协程,又称微线程,纤程.英文名Coroutine 协程看上去也是子程序 ...
- Python数据可视化——matplotlib.pyplot中plt的参数详解
matplotlib.pyplot中plt的参数详解: #平滑折线的示例 # plt.plot(xnew, ynew, marker='.', markevery=markevery, ls='-', ...
- python 下划线变量_Python中的下划线详解
这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定. 一. 单个下划线直接做变量名(_) 主要有三种情况: 1. 解释器中 _ ...
- mysql iif函数_sql中的iif语句详解_mysql
IIf 返回由逻辑测试确定的两个数值或字符串值之一. 语法 数字 IIf(«Logical Expression», «Numeric Expression1», «Numeric Expressio ...
- python列转行函数_Python pandas 列转行操作详解(类似hive中explode方法)
最近在工作上用到Python的pandas库来处理excel文件,遇到列转行的问题.找了一番资料后成功了,记录一下. 1. 如果需要爆炸的只有一列: df=pd.DataFrame({'A':[1,2 ...
- python数据处理常用函数_Python中常用操作字符串的函数与方法总结
Python中常用操作字符串的函数与方法总结 这篇文章主要介绍了Python中常用操作字符串的函数与方法总结,包括字符串的格式化输出与拼接等基础知识,需要的朋友可以参考下 例如这样一个字符串 Pyth ...
- python中deepcopy函数_python中copy()和deepcopy()详解
**首先直接上结论: -–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在.所以改变原有被复制对象不会对已经复制出来的新对象产生影响. -–而浅复制并不会产生一个独立 ...
- Python面向对象编程(类编程)中self的含义详解(简单明了直击本质的解释)
以下是博主认为的对self讲解得比较透彻又简洁明了的资料. 上面的资料把这个问题说得简单明了,大家认真看一遍相信就对self有个深入的了解了. 总结一下: 在Python为面向对象编程中,成员函数被调 ...
最新文章
- 【错误记录】Android Studio 中查看 Gradle 配置的方法源码 ( 配置 gradle-wrapper.properties 中版本为 gradle-x.x.x-all.zip )
- 微信小程序项目文件配置介绍
- git push 推送大文件失败的处理办法
- 集成android studio,Android Studio集成
- 转:asp.net 负载平衡-Session相关
- 章国锋:视觉SLAM最新观点分享
- [Udacity] Machine Learning tools
- SQL面试题(1-10)oracle写的
- 笔记本外接显示器设置全屏壁纸
- 【转】阿里去IOE运动
- Android启动模式分析
- 字节跳动岗位薪酬体系曝光,看完感叹:不服不行
- 如何才能将企业现有的组织关系集成到jbpm中?
- 【算法千题案例】每日LeetCode打卡——68.反转字符串中的元音字母
- 视频播放–AVPlayer
- SEER数据库中肿瘤发病率计算并绘制发病率趋势图
- jquery怎么根据id获取元素值
- Rowid和Rownum的区别
- python 变量命名规范
- sklearn和tensorflow