pytorch 数据处理:定义自己的数据集合实例


Posted in Python onDecember 31, 2019

数据处理

版本1

#数据处理
import os
import torch
from torch.utils import data
from PIL import Image
import numpy as np

#定义自己的数据集合
class DogCat(data.Dataset):

  def __init__(self,root):
    #所有图片的绝对路径
    imgs=os.listdir(root)

    self.imgs=[os.path.join(root,k) for k in imgs]

  def __getitem__(self, index):
    img_path=self.imgs[index]
    #dog-> 1 cat ->0
    label=1 if 'dog' in img_path.split('/')[-1] else 0
    pil_img=Image.open(img_path)
    array=np.asarray(pil_img)
    data=torch.from_numpy(array)
    return data,label

  def __len__(self):
    return len(self.imgs)

dataSet=DogCat('./data/dogcat')

print(dataSet[0])

输出:

( 
( 0 ,.,.) = 
215 203 191 
206 194 182 
211 199 187 
⋮ 
200 191 186 
201 192 187 
201 192 187

( 1 ,.,.) = 
215 203 191 
208 196 184 
213 201 189 
⋮ 
198 189 184 
200 191 186 
201 192 187

( 2 ,.,.) = 
215 201 188 
209 195 182 
214 200 187 
⋮ 
200 191 186 
202 193 188 
204 195 190 
…

(399,.,.) = 
72 90 32 
88 106 48 
38 56 0 
⋮ 
158 161 106 
87 85 36 
105 98 52 
[torch.ByteTensor of size 400x300x3] 
, 1)

上面的数据处理有下面的问题:

1.返回的样本的形状大小不一致,每一张图片的大小不一样。这对于需要batch训练的神经网络来说很不友好。

2. 返回的数据样本数值很大,没有归一化【-1,1】

对于上面的问题,pytorch torchvision 是一个视觉化的工具包,提供了很多的图像处理的工具,其中transforms模块提供了对PIL image对象和Tensor对象的常用操作。

对PIL Image常见的操作如下;

Resize 调整图片的尺寸,长宽比保持不变

CentorCrop ,RandomCrop,RandomSizeCrop 裁剪图片

Pad 填充

ToTensor 将PIL Image 转换为Tensor,会自动将[0,255] 归一化至[0,1]

对Tensor 的操作如下:

Normalize 标准化,即减均值,除以标准差

ToPILImage 将Tensor转换为 PIL Image对象

版本2

#数据处理
import os
import torch
from torch.utils import data
from PIL import Image
import numpy as np
from torchvision import transforms

transform=transforms.Compose([
  transforms.Resize(224), #缩放图片,保持长宽比不变,最短边的长为224像素,
  transforms.CenterCrop(224), #从中间切出 224*224的图片
  transforms.ToTensor(), #将图片转换为Tensor,归一化至[0,1]
  transforms.Normalize(mean=[.5,.5,.5],std=[.5,.5,.5]) #标准化至[-1,1]
])

#定义自己的数据集合
class DogCat(data.Dataset):

  def __init__(self,root):
    #所有图片的绝对路径
    imgs=os.listdir(root)

    self.imgs=[os.path.join(root,k) for k in imgs]
    self.transforms=transform

  def __getitem__(self, index):
    img_path=self.imgs[index]
    #dog-> 1 cat ->0
    label=1 if 'dog' in img_path.split('/')[-1] else 0
    pil_img=Image.open(img_path)
    if self.transforms:
      data=self.transforms(pil_img)
    else:
      pil_img=np.asarray(pil_img)
      data=torch.from_numpy(pil_img)
    return data,label

  def __len__(self):
    return len(self.imgs)

dataSet=DogCat('./data/dogcat')

print(dataSet[0])

输出:

( 
( 0 ,.,.) = 
-0.1765 -0.2627 -0.1686 … -0.0824 -0.2000 -0.2627 
-0.2392 -0.3098 -0.3176 … -0.2863 -0.2078 -0.1765 
-0.3176 -0.2392 -0.2784 … -0.2941 -0.1137 -0.0118 
… ⋱ … 
-0.7569 -0.5922 -0.1529 … -0.8510 -0.8196 -0.8353 
-0.8353 -0.7255 -0.3255 … -0.8275 -0.8196 -0.8588 
-0.9373 -0.7647 -0.4510 … -0.8196 -0.8353 -0.8824

( 1 ,.,.) = 
-0.0431 -0.1373 -0.0431 … 0.0118 -0.0980 -0.1529 
-0.0980 -0.1686 -0.1765 … -0.1608 -0.0745 -0.0431 
-0.1686 -0.0902 -0.1373 … -0.1451 0.0431 0.1529 
… ⋱ … 
-0.5529 -0.3804 0.0667 … -0.7961 -0.7725 -0.7961 
-0.6314 -0.5137 -0.1137 … -0.7804 -0.7882 -0.8275 
-0.7490 -0.5608 -0.2392 … -0.7725 -0.8039 -0.8588 
… 
[torch.FloatTensor of size 3x224x224] 
, 1)

项目的github地址:https://github.com/WebLearning17/CommonTool

以上这篇pytorch 数据处理:定义自己的数据集合实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
Python实现全角半角字符互转的方法
Nov 28 Python
在python 不同时区之间的差值与转换方法
Jan 14 Python
如何通过Python实现标签云算法
Jul 02 Python
PyQt5 界面显示无响应的实现
Mar 26 Python
Python使用os.listdir和os.walk获取文件路径
May 21 Python
利用keras使用神经网络预测销量操作
Jul 07 Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 01 Python
Python实现DBSCAN聚类算法并样例测试
Jun 22 Python
Python 避免字典和元组的多重嵌套问题
Jul 15 Python
python 镜像环境搭建总结
Sep 23 Python
pytorch: Parameter 的数据结构实例
Dec 31 #Python
Python测试线程应用程序过程解析
Dec 31 #Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 #Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
Dec 31 #Python
Python面向对象封装操作案例详解
Dec 31 #Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
Dec 31 #Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 #Python
You might like
第七节--类的静态成员
2006/11/16 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
Python入门篇之条件、循环
2014/10/17 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
python @property的用法及含义全面解析
2018/02/01 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python实现网页自动签到功能
2019/01/21 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
求职信内容考虑哪几点
2013/10/05 职场文书
申报职称专业技术个人的自我评价
2013/12/12 职场文书
研究生毕业鉴定
2014/01/29 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
小学教师师德承诺书
2014/05/23 职场文书
元旦标语大全
2014/10/09 职场文书
2015年发展党员工作总结报告
2015/03/31 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL