ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Pytorch_DataLoader涉及内容

2022-01-04 17:05:31  阅读:252  来源: 互联网

标签:torch data DataLoader Pytorch 涉及 collate numpy fn


DataLoader

torch.utils.data.Dataset
torch.utils.data.DataLoader
     Dataset和DataLoader两个工具类完成数据的加载,
     Dataset    用于构造数据集(数据集能够通过索引取出一条数据)、
     DataLoader 用于取一批次的数据(Pytorch只支持批数据处理)

We use transforms to perform some manipulation of the data and make it suitable for training.
   have two parameters -  transform to modify the features 
                      and target_transform to modify the labels
		ToTensor converts a PIL image or NumPy ndarray into a FloatTensor
		Lambda transforms apply any user-defined lambda function
1.Dataset	 
    two different types of datasets:
        01.map-style datasets,       CLASS torch.utils.data.Dataset(*args, **kwds)
        02.iterable-style datasets.  CLASS torch.utils.data.IterableDataset(*args, **kwds)	 
	 
2.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,
           batch_sampler=None, num_workers=0, collate_fn=None,
           pin_memory=False, drop_last=False, timeout=0,
           worker_init_fn=None, *, prefetch_factor=2,
           persistent_workers=False)	 

DataLoader类

 dataset    是定义的数据加载类的对象
 batch_size 是每批次数据的大小,通常根据内存等确
 shuffle    是每次加载一批数据时是否将其打乱,在训练时一般设置为True、测试时设置为False
 num_workers是在读取数据时使用的线程数
 collate_fn argument is used to collate lists of samples into batches. 
    When automatic batching is disabled, collate_fn is 
   When automatic batching is enabled, collate_fn
   collate_fn:如何取样本的,我们可以定义自己的函数来准确地实现想要的功能- 将一个list的sample组成一个mini-batch 的函数
       collate_fn (callable, optional): merges a list of samples to form a mini-batch.
        mini-batch_size 的大小来指定一次加载至显存中的图片数量
 返回值
     - dataloader 封装成一个Batch Size大小的Tensor,用于后面的训练
     - dataloader本质是一个可迭代对象,使用iter()访问
     - 使用iter(dataloader)返回的是一个迭代器,然后可以使用next访问

 类似的情况
 torchvision.datasets
 torchvision.transforms
 torchvision.models

Python 语法复习

01.迭代的对象Iterable-可以用for循环的对象):
  一类:list,tuple,dict,set,str  (list,dict,str是Iterable,但不是Iterator,
                                 要把list,dict,str等Iterable转换为Iterator可以使用iter()函数)
  二类:generator,包含生成器和带yield的generatoe function
       而生成器不但可以作用于for,还可以被next()函数不断调用并返回下一个值,
  	 可以被next()函数不断返回下一个值的对象称为迭代器:Iterator
  	    next(iterator[, default])  -- default -- 可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 StopIteration 异常。
02.zip() 函数用于将可迭代的对象作为参数,
    将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
     ,利用 * 号操作符,可以将元组解压为列表
     如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同


03.#数据类型转换
   # 将numpy数组转化为torch中的tensor:torch.from_numpy();
   import numpy as np
   a = np.ones(5)
   b = torch.from_numpy(a)	
   
   # # 将torch的tensor转换为numpy数组:.numpy();;		  tensor --> numpy --> image 
   c = .numpy()
   
   # numpy数组和图片互转 import cv2
   # .npy是numpy 专用的二进制文件
   
   
   import numpy as np
   import cv2
   # 默认的dtype是float64
   arrayexp = np.array([ [[14,7,0],[15,9,0],[48, 40, 27],[ 0,0,0],[ 1,2,0],[ 2,3,1]]
                           ,[[51, 45 ,34],[42, 36, 23],[42, 37, 22],[ 0,0,0],[ 1,2,0],[ 1,2,0]]
                           ,[[42, 39 ,24],[36, 34, 16],[32, 31, 11],[ 1,1,1],[ 1,1,1],[ 1,1,1]]
                           ,[[ 1,2,0],[ 3,4,0],[ 3,4,0],[ 1,1,1],[ 2,3,1],[ 1,2,0]]
                           ,[[ 1,2,0],[ 2,3,0],[ 2,3,0],[ 1,1,1],[ 1,2,0],[ 1,2,0]]
                           ,[[ 2,3,0],[ 2,3,0],[ 3,4,0],[ 2,3,1],[ 1,2,0],[ 1,2,0]]
                         ],dtype=np.uint8)
   print(arrayexp.shape,arrayexp.dtype)
   # 1.起图片名,2.图片本身
   cv2.namedWindow('trans2')
   cv2.imshow('trans2',arrayexp)
   cv2.waitKey(0)
   print("done !")
   
  # 注意 opencv的像素是BGR顺序,然而matplotlib所遵循的是RGB顺序。 opencv的一个像素为:[B,G,R] ,matplotlib的一个像素为:[R,G,B]

参考

  TORCH.UTILS.DATA  https://pytorch.org/docs/stable/data.html#torch.utils.data.Dataset
  python中的next()以及iter()函数  https://www.cnblogs.com/SupremeBoy/p/12251240.html 
  numpy数组和图片互转  https://blog.csdn.net/sin_404/article/details/115397142

标签:torch,data,DataLoader,Pytorch,涉及,collate,numpy,fn
来源: https://www.cnblogs.com/ytwang/p/15763103.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有