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操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
Jul 11 Python
python中reload(module)的用法示例详解
Sep 15 Python
Python中pygal绘制雷达图代码分享
Dec 07 Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
Aug 22 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
python如何求数组连续最大和的示例代码
Feb 04 Python
解决c++调用python中文乱码问题
Jul 29 Python
Python爬取12306车次信息代码详解
Aug 12 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
基于Python绘制子图及子图刻度的变换等的问题
May 23 Python
Python实现生成bmp图像的方法
Jun 13 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
BBS(php & mysql)完整版(七)
2006/10/09 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
PHP daddslashes 使用方法介绍
2012/10/26 PHP
PHP实现添加购物车功能
2017/03/06 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python遍历指定文件及文件夹的方法
2015/05/09 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
解决Django中checkbox复选框的传值问题
2020/03/31 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
斯福泰克软件测试面试题
2015/02/16 面试题
举例说明类变量和实例变量的区别
2016/06/30 面试题
学生宿舍管理制度
2014/01/30 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
保送生自荐信范文
2015/03/26 职场文书
2019入党申请书格式
2019/06/25 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python