当前位置: 首页 > news >正文

DataLoader使用

文章目录

    • 一、认识dataloader
    • 二、DataLoader整合数据集
    • 三、使用DataLoader展示图片方法
    • 四、去除结尾不满足batch_size设值图片的展示

一、认识dataloader

DataLoader 用于封装数据集,并提供批量加载数据的迭代器。它支持自动打乱数据、多线程数据加载等功能。dataset只是告诉我们数据集在一个什么位置,而dataloader则可以把数据加载到神经网络当中。dataloader就相当于在dataset当中去取数据,怎么取。
在这里插入图片描述
dataset就相当于一副牌,而dataloader就相当于每次从dataset这幅牌堆中怎么抽牌,是一次性抽5张牌,用左手抽还是右手抽。相对而言dataloader就是方法。

二、DataLoader整合数据集

将4个数据中的img 和 target 分别封装起来,称为imgs,targets
在这里插入图片描述

import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter#准备的测试数据集
test_data = torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor())test_loader = DataLoader(dataset=test_data,batch_size=4,shuffle=True,num_workers=0,drop_last=False)#测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)for data in test_loader:imgs, targets = dataprint(imgs.shape)print(targets)

test_loader = DataLoader(
dataset=test_data, # 指定要加载的数据集
batch_size=4, # 指定每个批次的大小为4,4表示从数据集中取4个数据
shuffle=True, # 设置为True表示在每个epoch开始时打乱数据。一个epoch意味着数据加载器将整个数据集按照指定的顺序(可能是随机的,如果设置了shuffle=True)遍历一次。
num_workers=0, # 指定加载数据时使用的子进程数,0表示在主进程中加载数据
drop_last=False # 设置为False表示即使最后一个批次的数据量小于batch_size也会加载,True则不加载
)

print(imgs.shape)表示打印批次中图像张量的形状,例如(4, 3, 32, 32),表示有4张图像,每张图像有3个颜色通道,大小为32x32像素

运行结果:
在这里插入图片描述
在机器学习中,这样的张量通常用来表示分类任务中的标签。例如,在 CIFAR-10 数据集中,每个图像都有一个与之对应的标签,表示图像中物体的类别。CIFAR-10 数据集包含10个类别,每个类别用一个数字(0到9)来表示。

在这个例子中,tensor([3, 3, 7, 1]) 可能表示一个包含4张图像的批次,每张图像的标签分别是:
第一张图像的标签是 3
第二张图像的标签也是 3
第三张图像的标签是 7
第四张图像的标签是 1

三、使用DataLoader展示图片方法

import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter#准备的测试数据集
test_data = torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor())test_loader = DataLoader(dataset=test_data,batch_size=64,shuffle=True,num_workers=0,drop_last=False)#测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)writer = SummaryWriter("dataloader")# 初始化一个变量step,用于记录当前的步骤或批次编号
step = 0# 使用add_images方法将当前批次的图像写入TensorBoard日志
# "test_data"是图像在TensorBoard中的标签,imgs是要记录的图像张量,step是当前的步骤编号
for data in test_loader:imgs, targets = datawriter.add_images("test_data", imgs, step)# 每次迭代后,步骤编号增加1step = step + 1writer.close()

运行结果:
在这里插入图片描述

四、去除结尾不满足batch_size设值图片的展示

将drop_last 设置为True,就可以去除末尾不满足batch_size设值的照片

import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter#准备的测试数据集
test_data = torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor())test_loader = DataLoader(dataset=test_data, batch_size=64,shuffle=True,num_workers=0,drop_last=True)#测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)writer = SummaryWriter("dataloader")# 初始化一个变量step,用于记录当前的步骤或批次编号
step = 0
# 使用add_images方法将当前批次的图像写入TensorBoard日志
# "test_data"是图像在TensorBoard中的标签,imgs是要记录的图像张量,step是当前的步骤编号
for data in test_loader:imgs, targets = datawriter.add_images("test_data_drop_last", imgs, step)# 每次迭代后,步骤编号增加1step = step + 1writer.close()

运行结果:
在这里插入图片描述
如下面的照片,刚好满足batch_size设值。

http://www.lryc.cn/news/432050.html

相关文章:

  • CSS学习11--版心和布局流程以及几种分布的例子
  • NetSuite AI 图生代码
  • Java - BigDecimal计算中位数
  • Tensorflow2如何读取自制数据集并训练模型?-- Tensorflow自学笔记13
  • JVM系列(七) -对象的内存分配流程
  • Apache Ignite 在处理大规模数据时有哪些优势和局限性?
  • 怎么利用NodeJS发送视频短信
  • WebAPI(三)、 DOM 日期对象Date;获取事件戳;根据节点关系查找节点
  • 012.Oracle-索引
  • SSL 证书 | 免费获取与自动续期全攻略
  • 达梦数据库管理员常用SQL(一)
  • HttpUtils工具类(三)OKHttpClient使用详细教程
  • 重生奇迹MU老大哥剑士职业宝刀未老
  • 关于Netty详细介绍,Netty原理架构解析
  • 在Unity环境中使用UTF-8编码
  • 零工市场小程序:自由职业者的日常工具
  • 【Http 每日一问,访问服务端的鉴权Token放在header还是cookie更合适?】
  • vue2+ueditor集成秀米编辑器
  • [网络]HTTP协议 Cookie与Session
  • 安宝特科技 | AR眼镜在安保与安防领域的创新应用及前景
  • 2024 第十二届重庆国际植保双交会暨新型肥料农药产业博览会
  • 用“说”智能控制灯具开关语音识别芯片NRK3603
  • APS开源源码解读: 排程工具 optaplanner
  • AMEYA360:村田量产用于汽车市场的高可靠性0603M铜电极负温度系数NTC热敏电阻
  • 代码随想录第十天|150.逆波兰表达式求值 239.滑动窗口的最大值 347.前K个高频元素
  • [阅读笔记]《解读基金—我的投资观与实践》— 季凯帆
  • 2.3之前
  • 处理器基础知识——cache
  • 操作系统的运行环境
  • 如何在 Selenium 中获取网络调用请求?