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

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 = data
    print(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 = data
    writer.add_images("test_data", imgs, step)

    # 每次迭代后,步骤编号增加1
    step = step + 1

writer.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 = data
    writer.add_images("test_data_drop_last", imgs, step)

    # 每次迭代后,步骤编号增加1
    step = step + 1

writer.close()

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


http://www.kler.cn/a/294961.html

相关文章:

  • UI资源分包 -- 基于Xasset框架代码实例
  • 番外:MySQL的一些事务处理
  • 【AI写作宝-注册安全分析报告-无验证方式导致安全隐患】
  • YOLOv11融合ICCV[2023]动态蛇形卷积Dynamic模块及相关改进思路|YOLO改进最简教程
  • 【论文复现】ChatGPT多模态命名实体识别
  • 【Python无敌】在 QGIS 中使用 Python
  • [数据集][目标检测]电动车头盔佩戴检测数据集VOC+YOLO格式4235张5类别
  • 计算机网络与Internet应用
  • OpenCV与Matplotlib:灰度图像
  • 漫谈设计模式 [20]:解释器模式
  • 实战项目-快速实战-springboot dataway
  • linux 检查cpu 内存命令
  • Flutter基本组件Text使用
  • 嵌入式面试刷题
  • 商城系统的数据库
  • 电脑录屏杂音太大怎么办 电脑录屏杂音去除办法有哪些 解决录屏电流声等问题技巧与工具推荐
  • 如何选择国内大带宽服务器租用?
  • ❤《实战纪录片 1 》原生开发小程序中遇到的问题和解决方案
  • 一个vue重新回顾,好多年前写的
  • 常见的排序
  • Leetcode 152. 乘积最大子数组(Medium)
  • 通信工程学习:什么是ARQ自动重传请求
  • 【计算机视觉】语义分割输入图像尺寸
  • 快速傅里叶变换(FFT)及其在多项式乘法中的应用 —— 深入分析与 Python 实现
  • android AccessibilityService合法合规采集大众点评app商店商品详情(2024-09-02)
  • 【Qt笔记】QListWidget控件详解