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 相关文章推荐
Python中for循环和while循环的基本使用方法
Aug 21 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
python中实现k-means聚类算法详解
Nov 11 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
python 解压pkl文件的方法
Oct 25 Python
python根据url地址下载小文件的实例
Dec 18 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
Jul 07 Python
django的ORM操作 删除和编辑实现详解
Jul 24 Python
Kears+Opencv实现简单人脸识别
Aug 28 Python
Django框架HttpResponse对象用法实例分析
Nov 01 Python
Python生态圈图像格式转换问题(推荐)
Dec 02 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
python 发送json数据操作实例分析
2019/10/15 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
医学院四年学习生活的自我评价
2013/11/06 职场文书
会计专业自荐信范文
2013/12/02 职场文书
教学器材管理制度
2014/01/26 职场文书
外贸专业求职信
2014/03/09 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android
python 镜像环境搭建总结
2022/09/23 Python