侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

pytorch 数据处理:定义自己的数据集合实例

Python  /  管理员 发布于 5年前   339

数据处理

版本1

#数据处理import osimport torchfrom torch.utils import datafrom PIL import Imageimport 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 osimport torchfrom torch.utils import datafrom PIL import Imageimport numpy as npfrom torchvision import transformstransform=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 数据处理:定义自己的数据集合实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


  • 上一条:
    Pytorch 数据加载与数据预处理方式
    下一条:
    pytorch中的上采样以及各种反操作,求逆操作详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客