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中的list列表及其切片和迭代操作
Mar 13 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
Python中six模块基础用法
Dec 08 Python
Python切割图片成九宫格的示例代码
Mar 10 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
keras 简单 lstm实例(基于one-hot编码)
Jul 02 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
python神经网络编程之手写数字识别
May 08 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
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
JavaScript编程中实现对象封装特性的实例讲解
2016/06/24 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
JavaScript实现瀑布流图片效果
2017/06/30 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
Python实现基于HTTP文件传输实例
2014/11/08 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
班级活动策划书
2014/02/06 职场文书
新闻发布会主持词
2014/03/28 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
保密工作目标责任书
2014/07/28 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
索赔员岗位职责
2015/02/15 职场文书
毕业实习感受与体会
2015/05/26 职场文书
2016七夕情人节感言
2015/12/09 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android