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 19 Python
Python生成器(Generator)详解
Apr 13 Python
Python lxml模块安装教程
Jun 02 Python
python如何通过protobuf实现rpc
Mar 06 Python
Python教程之全局变量用法
Jun 27 Python
Python编程生成随机用户名及密码的方法示例
May 05 Python
Python中的TCP socket写法示例
May 11 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
Python数据类型之Set集合实例详解
May 07 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
python操作redis数据库的三种方法
Sep 10 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
Nov 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
在mysql数据库原有字段后增加新内容
2009/11/26 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
laravel 获取某个查询的查询SQL语句方法
2019/10/12 PHP
javascript 类定义的4种方法
2009/09/12 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
Python zip()函数用法实例分析
2018/03/17 Python
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
Python实现模拟浏览器请求及会话保持操作示例
2018/07/30 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
幼儿教师研修感言
2014/02/12 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
设计大赛策划方案
2014/06/13 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
技术员个人工作总结
2015/03/03 职场文书
教师病假条范文
2015/08/17 职场文书
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS