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完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
Python中实现结构相似的函数调用方法
Mar 10 Python
python正常时间和unix时间戳相互转换的方法
Apr 23 Python
对python中的logger模块全面讲解
Apr 28 Python
Python3 导入上级目录中的模块实例
Feb 16 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
Python实现随机生成任意数量车牌号
Jan 21 Python
Python 发送邮件方法总结
Aug 10 Python
Python Merge函数原理及用法解析
Sep 16 Python
python实现简单遗传算法
Sep 18 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
Jan 15 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
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
PHP使用函数用法详解
2018/09/30 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
javascript 日期时间 转换的方法
2013/02/21 Javascript
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
Textarea输入字数限制实例(兼容iOS&安卓)
2017/07/06 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
2020/10/28 Javascript
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
python pygame实现球球大作战
2019/11/25 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
Python之多进程与多线程的使用
2021/02/23 Python
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
采购部长岗位职责
2014/06/13 职场文书
内科护士节演讲稿
2014/09/11 职场文书
高中教师个人工作总结
2015/02/10 职场文书
公务员年终个人总结
2015/02/12 职场文书
2016教师节问候语
2015/11/10 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python
如何通过cmd 连接阿里云服务器
2022/04/18 Servers
Java版 单机五子棋
2022/05/04 Java/Android