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 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
python中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
Python实现生成简单的Makefile文件代码示例
Mar 10 Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
python pyheatmap包绘制热力图
Nov 09 Python
Python生成MD5值的两种方法实例分析
Apr 26 Python
python支付宝支付示例详解
Aug 22 Python
用python的turtle模块实现给女票画个小心心
Nov 23 Python
基于Python把网站域名解析成ip地址
May 25 Python
python打开文件的方式有哪些
Jun 29 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 Python
详解Python小数据池和代码块缓存机制
Apr 07 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
PHP入门速成教程
2007/03/19 PHP
简单的PHP图片上传程序
2008/03/27 PHP
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
python复制文件的方法实例详解
2015/05/22 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
python文件绝对路径写法介绍(windows)
2019/12/25 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
高三励志标语
2014/06/05 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis