方法一,简单yield方法。

假如我都数据集是一个列表[0,1,2,3,4,5,6,7,8,9]。
需求:

  • 打乱顺序,相当于随机取数。
  • 一轮取完,重新打乱顺序,继续取数。无穷无尽。
def test_yeild():np.random.shuffle(a)for j in range(10):yield a[j]
if __name__ == '__main__':a = list(range(10))while True:for i in test_yeild():print(i)print("finish***")

下面是pytorch的自带的图像数据集cifar10的处理方法。

import numpy as np
import _pickle as pickledef unpickle(file):fo = open(file, 'rb')dict = pickle.load(fo, encoding='bytes')fo.close()return dict[b'data']def cifar_generator(filenames, batch_size, data_dir):all_data = []for filename in filenames:all_data.append(unpickle(data_dir + '/' + filename))images = np.concatenate(all_data, axis=0)def get_epoch():np.random.shuffle(images)for i in range(int(len(images) / batch_size)):yield np.copy(images[i*batch_size:(i+1)*batch_size])return get_epochdef load(batch_size, data_dir):return (cifar_generator(['data_batch_1','data_batch_2','data_batch_3','data_batch_4','data_batch_5'], batch_size, data_dir), cifar_generator(['test_batch'], batch_size, data_dir))

解释:

  1. 代码看起来很复杂,其实核心是返回get_epoch数据集生成器(注意,没有括号’()')。
  2. load() 方法是返回训练集、测试集的两个生成器的方法。
  3. cifar_generator() 方法是核心处理步骤。
  4. unpickle() 是解析数据集的文件,因为自带的cifar10是以二进制的格式存储的。return dict[b’data’] 返回的是n3072的数据矩阵,n是数据的个数,3072=3232*3,也就是32像素的彩色图像。

方法二,ImageFolder+DataLoader+yield方法

from torchvision import datasets
datasets.ImageFolder
torch.utils.data.DataLoader
下面是我来曾用过的一个数据集加载方法。

class DataLoaderMy(datasets.ImageFolder):def __init__(self, baseDir):self.baseDir = baseDirself.img_lists = self.getImgList(self.baseDir)self.transform = transforms.Compose([transforms.ToPILImage(),transforms.ToTensor()])def getImgList(self, baseDir):img_list = []list_dir = os.walk(baseDir)for root, dirs, files in list_dir:for f in files:file_name = f.split('.')if file_name[-1] in ['png', 'jpg', 'JPG', 'PNG', 'JPG', 'jpeg', 'JPEG', 'bmp']:img_file = root + '/' + fimg_list.append(img_file)return img_listdef __getitem__(self, idx):img_name = self.img_lists[idx]img_path = os.path.join(self.baseDir,img_name)img = cv2.imread(img_path)# img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)# img = torch.from_numpy(img).cuda().float()img = self.transform(img)return img.cuda()def __len__(self):return len(self.img_lists)

如何加载?看下面代码

imgLoaderG = DataLoaderMy(data_dir)
data_loader_G = torch.utils.data.DataLoader(imgLoaderG,            batch_size=batch_size, shuffle=True)
while True:for images in data_loader:yield images

yield数据集生成器用法学习相关推荐

  1. php 协程怎么用,PHP yield 协程 生成器用法的了解

    写在前面 这篇文章,要和大家探讨的是 PHP yield 在 生成器用法,不带 foreach,for, while 循环的那种.就讨论 yield 将一个函数变成为生成器的用法.关于yield 特性 ...

  2. php yield 详解,PHP yield 协程 生成器用法的了解

    写在前面 这篇文章,要和大家探讨的是 PHP yield 在 生成器用法,不带 foreach,for, while 循环的那种.就讨论 yield 将一个函数变成为生成器的用法.关于yield 特性 ...

  3. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  4. 这个CV数据集生成器火了,支持13类复杂CV任务,DeepMind谷歌MIT等打造丨开源

    来源:量子位 这年头,AI玩家们想找到合适的图像数据集,简直是越来越难了. 不仅数据质量参差不齐,合适的数据类型也难找(如光流图.深度图等). 为了解决这些问题,来自谷歌.MIT.DeepMind.M ...

  5. php迭代器实例,PHP迭代器和生成器用法实例分析

    本文实例讲述了PHP迭代器和生成器用法.分享给大家供大家参考,具体如下: 迭代器 迭代器实际是一个实现了Iterator的类,可以用foreach进行遍历. 例如: class Sample impl ...

  6. php yield 个人小解_PHP5.5新特性之yield理解与用法实例分析

    本文实例讲述了PHP5.5新特性之yield理解与用法.分享给大家供大家参考,具体如下: yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实 ...

  7. SSD训练数据集流程(学习记录)

    关于理论部分我看的是b站"霹雳吧啦Wz"的SSD理论讲解,作为入门小白表示能听懂,需要的同学可以自行观看 目录 1.训练环境 2.训练步骤 1.训练环境 我的环境是win11+an ...

  8. 微软BI 之SSAS 系列 - 多维数据集维度用法之二 事实维度(退化维度 Degenerate Dimension)...

    这篇文章是基于上一篇 SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension 继续讲解多维数据集维度用法中的事实维度. 事实维度,顾名思义就是把事实表 Fact ...

  9. Java线程中wait、await、sleep、yield、join用法总结

    文章目录 一.wait().notify().notifyAll()用法 二.await().signal().signalAll()用法 三 .yield().join()用法 四.wait().a ...

最新文章

  1. 【面试锦囊】位运算介绍与经典例题总结
  2. C语言求最大公约数GCD的算法(附完整源码)
  3. 关于python的全局变量和局部变量、以下描述错误的是_Python:全局变量与局部变量的问题...
  4. [Python图像处理] 三十三.图像各种特效处理及原理万字详解(毛玻璃、浮雕、素描、怀旧、流年、滤镜等)
  5. 【Tools】Ubuntu18.04破解root密码
  6. 不吃不喝,两周业余时间研究(cisco SCE CM )
  7. hough变换检测圆周_Python OpenCV 霍夫变换
  8. wangeditor php上传本地图片,wangEditor 本地上传图片配置
  9. 初中 计算机文化知识,计算机文化知识(Computer literacy).doc
  10. UVALive - 6436
  11. HBuilderX:自定义代码块
  12. Linux测网速工具,Linux中上下行网速测试工具 speedtest-cli
  13. 基于Java+SpringBoot+vue+element实现校园疫情防控系统详细设计和实现
  14. 谷歌、百度、搜狗、有道搜索个人之比较
  15. 别只看钱:赛门铁克46.5亿美元现金收购Blue Coat为哪般?
  16. plus钱包受黑客攻击_如何保护您的在线业务免受黑客攻击
  17. 【解决】package ‘xxxx‘ is not in GOROOT
  18. 山科大 6-1 sdust-Java-可实现多种排序的Book类 (20 分)(18 软件 期中考试函数1)
  19. 苹果的福利被“羊毛党”薅废了
  20. 腾讯云添加添加二级域名

热门文章

  1. com.qq.ac.android,腾讯动漫启动直接 crash
  2. chatgpt赋能python:Python一行输出8个数的神奇魔法!
  3. Java个人手机账户功能的基本操作实现
  4. 年会,用Python做了个 “抽奖程序”,boss奖励我一个红包!
  5. 安装Saas芸众商城系统后提示:{“result“:0,“msg“:““,“data“:{“status“:-4}}报错的原因
  6. 满足你各种姿势的最美Android开源日历
  7. 国产蓝牙耳机什么牌子的好?音质好的国产耳机品牌
  8. android百分号运算符计算器,请教这个计算器中的百分号与分数计算的代码。
  9. c++三种直线绘制算法
  10. Java面试题全集上