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中用Spark模块的使用教程
Apr 13 Python
Python实现根据IP地址和子网掩码算出网段的方法
Jul 30 Python
python模拟Django框架实例
May 17 Python
python去除空格和换行符的实现方法(推荐)
Jan 04 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
详解django中自定义标签和过滤器
Jul 03 Python
详谈python中冒号与逗号的区别
Apr 18 Python
Python 获取div标签中的文字实例
Dec 20 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
Aug 22 Python
Python实现TCP通信的示例代码
Sep 09 Python
关于python scrapy中添加cookie踩坑记录
Nov 17 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
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
php实现的短网址算法分享
2014/06/20 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
js实现登录验证码
2016/12/22 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
python开发之函数定义实例分析
2015/11/12 Python
python2 与python3的print区别小结
2018/01/16 Python
Python常见数据类型转换操作示例
2019/05/08 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
解决Mac下使用python的坑
2019/08/13 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
小加工厂管理制度
2014/01/21 职场文书
社区交通安全实施方案
2014/03/22 职场文书
英文慰问信
2015/02/14 职场文书
花田少年史观后感
2015/06/16 职场文书
签字仪式主持词
2015/07/03 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL