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实现的文件夹清理程序分享
Nov 22 Python
整理Python最基本的操作字典的方法
Apr 24 Python
python统计日志ip访问数的方法
Jul 06 Python
Python类属性的延迟计算
Oct 22 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
用Python将结果保存为xlsx的方法
Jan 28 Python
Python3.6.x中内置函数总结及讲解
Feb 22 Python
Python 常用模块 re 使用方法详解
Jun 06 Python
Python3自定义json逐层解析器代码
May 11 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
德生PL330的评价与改造
2021/03/02 无线电
如何正确理解PHP的错误信息
2006/10/09 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
php MessagePack介绍
2013/10/06 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
基于jquery的页面划词搜索JS
2010/09/14 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
纯JS实现轮播图
2017/02/22 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
python解析xml文件实例分享
2013/12/04 Python
python实现查询IP地址所在地
2015/03/29 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
Pyqt5实现英文学习词典
2019/06/24 Python
Python实现名片管理系统
2020/02/14 Python
Python chardet库识别编码原理解析
2020/02/18 Python
Python3的socket使用方法详解
2020/02/18 Python
详细分析Python collections工具库
2020/07/16 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
中职生求职信
2014/07/01 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
劳模先进事迹材料
2014/12/24 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
MySQL池化框架学习接池自定义
2022/07/23 MySQL