【PyTorch】关于torchvision中的数据集以及dataloader的使用

news2024/11/28 16:04:27

前提文章目录

【PyTorch】深度学习PyTorch环境配置及安装【详细清晰】
【PyTorch】深度学习PyTorch加载数据
【PyTorch】关于Tensorboard的简单使用
【PyTorch】关于Transforms的简单使用


文章目录

  • ``前提``文章目录
    • 数据集简介
    • 程序中下载数据集
    • 读取数据集
    • 结合transform进行读取数据集
    • dataloader
      • batch_size的参数测试
      • drop_last的参数测试
      • shuffle的参数测试

数据集简介

pytorch官网:https://pytorch.org/
cifar数据集网址:https://pytorch.org/vision/0.9/datasets.html#cifar
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

程序中下载数据集

在这里插入图片描述

使用CIFAR10数据集 按ctrl+p可以提示括号内需要输入什么参数
root:希望数据集存放在什么位置;
train 默认为true,为true表示该数据集为训练集 为false表示该数据集为测试集;
download: 为true就是让它进行一个下载

import torchvision
# 训练数据集
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, download=True)
# 测试数据集
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, download=True)

运行程序,可以看到如下图,说明已经开始下载了
在这里插入图片描述
下载速度慢的解决办法:
直接点击蓝色的下载链接进行下载或者将蓝色的下载链接放在迅雷里面进行下载
coco数据集大概30多个G,这个CIFAR数据集才一百多兆,比较时候练手
在这里插入图片描述
下载完毕!
在这里插入图片描述

读取数据集

import torchvision

# 训练数据集
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, download=True)
# 测试数据集
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, download=True)

# 查看数据集
print(test_set[0])  # (<PIL.Image.Image image mode=RGB size=32x32 at 0x27E68307FA0>, 3)  # 图片组成部分 第一个是图片 第二个是target
print(test_set.classes)  # ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']

img, target = test_set[0]
print(img)  # <PIL.Image.Image image mode=RGB size=32x32 at 0x27E21B660E0>
print(target)  # 3   实际上对应的就是test_set.classes的第4个也就是cat,因为它是从0开始算的,说明这张图片对应的是猫
print(test_set.classes[target])  # cat
# 展示图片  PIL的Image可以直接show
img.show()

数据集的图片比较小,只有32x32的像素
展示图片结果:
在这里插入图片描述

结合transform进行读取数据集

import torchvision

# PIL图片类型需要转为tensor类型
from torch.utils.tensorboard import SummaryWriter

dataset_transform = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor()
])
# 训练数据集
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, transform=dataset_transform, download=True)
# 测试数据集
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, transform=dataset_transform, download=True)

# # 查看数据集
# print(test_set[0])  # (<PIL.Image.Image image mode=RGB size=32x32 at 0x27E68307FA0>, 3)  # 图片组成部分 第一个是图片 第二个是target
# print(test_set.classes)  # ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
#
# img, target = test_set[0]
# print(img)  # <PIL.Image.Image image mode=RGB size=32x32 at 0x27E21B660E0>
# print(target)  # 3   实际上对应的就是test_set.classes的第4个也就是cat,因为它是从0开始算的,说明这张图片对应的是猫
# print(test_set.classes[target])  # cat
# # 展示图片
# img.show()

# print(test_set[0])  # tensor类型的  表明可以用tensorboard进行显示
writer = SummaryWriter("p10")
for i in range(10):
    img, target = test_set[i]
    writer.add_image("test_set", img, i)
writer.close()

运行程序后,打开终端,用tensorboard进行读取
在这里插入图片描述
在这里插入图片描述

dataloader

在这里插入图片描述
dataset:是一堆数据集,不知道里面每一张数据的内容
dataloader:将数据集加载到神经网络当中,做的是每次去dataset去取数据,每次取多少,怎么取,是由dataloader当中的参数设置的
dataloader官网:https://pytorch.org/docs/1.8.1/data.html?highlight=dataloader#torch.utils.data.DataLoader
在这里插入图片描述

常见参数设置

  • batch_size:每次取数据取的数量
  • shuffle:打乱数据,为true打乱顺序和原来不一样,false打乱顺序和原来一样
  • num_workers:多进程进行加载 默认为0,表示用主进程进行加载 ,有时候在Windows会有一些问题,num_workers>0,有时候在Windows下会出现一些错误
  • drop_last:对于取整数据集剩余除不尽的数据集的个数是采用舍去还是不舍去,为true舍去,false不舍去

示例测试:

batch_size的参数测试

import torchvision.datasets

from torch.utils.data import DataLoader

# 准备测试数据集
from torch.utils.tensorboard import SummaryWriter

test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())
# batch_size=4每次从数据集中取4张进行打包
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)  # torch.Size([3, 32, 32])
print(target)  # 3

writer = SummaryWriter("dataloader")
step = 0
for data in test_loader:
    imgs, targets = data
    # print(imgs.shape)  # torch.Size([4, 3, 32, 32]) 4张图片 3通道 32x32的图片
    # print(targets)  # tensor([9, 6, 5, 7])  ; 9, 6, 5, 7这些数字是随机抓取的target
    writer.add_images("test_data", imgs, step) #注意这里是add_images有一个s的
    step += 1
writer.close()

在这里插入图片描述
在这里插入图片描述

drop_last的参数测试

修改代码

test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)
writer.add_images("test_data_drop_last", imgs, step)

在这里插入图片描述

shuffle的参数测试

shuffle为False测试:第一次取的顺序和第二次取的顺序不打乱,是取得顺序是一样的

test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=False, num_workers=0, drop_last=True)
for epoch in range(2): # epoch 取值0、1    shuffle=False两轮摸一样的。不打乱
    step = 0
    for data in test_loader:
        imgs, targets = data
        writer.add_images("Epoch:{}".format(epoch), imgs, step)
        step += 1

在这里插入图片描述
shuffle为True测试:第一次取的顺序和第二次取的顺序会进行一个打乱

test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)

在这里插入图片描述
全部代码:

import torchvision.datasets

from torch.utils.data import DataLoader

# 准备测试数据集
from torch.utils.tensorboard import SummaryWriter

test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())
# batch_size=4每次从数据集中取4张进行打包
#test_loader = DataLoader(dataset=test_data, batch_size=4, shuffle=True, num_workers=0, drop_last=False)
# test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)
# test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=False, num_workers=0, drop_last=True)
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)  # torch.Size([3, 32, 32])
print(target)  # 3

writer = SummaryWriter("dataloader")
for epoch in range(2): # epoch 取值0、1    shuffle=False两轮摸一样的。不打乱
    step = 0
    for data in test_loader:
        imgs, targets = data
        # print(imgs.shape)  # torch.Size([4, 3, 32, 32]) 4张图片 3通道 32x32的图片
        # print(targets)  # tensor([9, 6, 5, 7])  ; 9, 6, 5, 7这些数字是随机抓取的target
        # writer.add_images("test_data", imgs, step)
        # writer.add_images("test_data_drop_last", imgs, step)
        writer.add_images("Epoch:{}".format(epoch), imgs, step)
        step += 1
writer.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++贪心】2498. 青蛙过河 II

本文涉及知识点 贪心 优化后不需要二分 LeetCode2498. 青蛙过河 II 给你一个下标从 0 开始的整数数组 stones &#xff0c;数组中的元素 严格递增 &#xff0c;表示一条河中石头的位置。青蛙一开始在第一块石头上&#xff0c;它想到达最后一块石头&#xff0c;然后回到第一块…

使用分布式锁解决IM聊天数据重复插入的问题

导航 业务背景问题分析与定位探索可行的解决方案 数据库层面处理——唯一索引应用程序层面处理——分布式锁 分布式锁概述 分布式锁需要具备哪些特性&#xff1f;分布式锁有哪些实现方式&#xff1f; 基于数据库的实现方式基于Redisson实现方式 Redission介绍 概述可重入锁 基…

STM32G474的HRTIM用作时基定时器

STM32G474的HRTIM由7个定时器组成&#xff0c;分别是主定时器&#xff0c;定时器A&#xff0c;定时器B&#xff0c;定时器C&#xff0c;定时器D&#xff0c;定时器E和定时器F&#xff0c;每个定时器均可单独配置&#xff0c;独立工作。每个定时器都有1个独立的计数器和4个独立的…

九泰智库 | 医械周刊- Vol.51

⚖️ 法规动态 白内障人工晶体类医用耗材集采落地&#xff0c;平均降幅60% 湖北省自7月10日起实施人工晶体类医用耗材集中带量采购政策&#xff0c;中选产品平均降幅达60%&#xff0c;显著减轻了患者经济负担。此举是国家组织医用耗材采购的一部分&#xff0c;旨在通过集中采购…

MES软件实施:解锁企业数字化转型的无限潜能

MES&#xff08;制造执行系统&#xff09;软件实施是企业数字化转型的重要一环&#xff0c;它确实能够解锁企业数字化转型的无限潜能。以下是对这一主题的详细分析&#xff1a; 一、MES软件的核心价值 集成与协同&#xff1a; MES软件能够集成企业内的各种生产数据和设备&…

企业市值排名3D可视化,重塑商业版图新维度

在这个数据驱动的时代&#xff0c;每一个数字背后都蕴藏着无限的可能与机遇。企业市值&#xff0c;作为衡量企业综合实力与市场认可度的关键指标&#xff0c;其动态变化不仅是投资者关注的焦点&#xff0c;也是全球商业竞争格局的晴雨表。 当枯燥的数据表格被转化为生动的3D场景…

如何选择需求跟踪管理软件?8款优质推荐

本文将介绍8款需求跟踪管理软件&#xff1a;PingCode、Worktile、得帆、协作云、火山引擎、Jira、VersionOne、YouTrack。 在面对众多需求跟踪管理软件时&#xff0c;每款软件都声称能提升效率、简化流程&#xff0c;但到底哪一款才真正适合你的团队&#xff1f;为了选择合适的…

Hadoop的概念

1.什么是大数据 数据体量巨大&#xff1a;数据量规模庞大&#xff0c;通常以PB&#xff08;拍字节&#xff09;或EB&#xff08;艾字节&#xff09;来衡量&#xff0c;远远超出了传统数据库和数据处理工具的处理能力。数据类型多样&#xff1a;大数据包括结构化数据、半结构化…

在控件graphicsView中实现绘图功能(二)

目录 前言&#xff1a;基础夯实&#xff1a;1.创建 QGraphicsScene 和 QGraphicsView2. 在 QGraphicsScene 中添加椭圆3. 渲染和显示4. 推荐学习本文之前查看的链接&#xff1a; 效果展示&#xff1a;实现功能&#xff1a;遇到问题&#xff1a;核心代码&#xff1a;仓库源码&am…

windows环境基于python 实现微信公众号文章推送

材料&#xff1a; 1、python 2.7 或者 python3.x 2、windows 可以通过 “python -m pip --version” 查看当前的pip 版本 E:\Downloads\newsInfo>python -m pip --version pip 20.3.4 from C:\Python27\lib\site-packages\pip (python 2.7) 3、windows 系统 制作&#xf…

基于STM32开发的智能家居安防系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化传感器数据采集与处理安防控制与报警机制Wi-Fi通信与远程监控应用场景 家庭安防系统办公室与商铺的安全监控常见问题及解决方案 常见问题解决方案结论 1. 引言 随着智能家居技术的…

【Hot100】LeetCode—226. 翻转二叉树

目录 1- 思路Queue 队列实现层序遍历 交换左右 2- 实现⭐226. 翻转二叉树——题解思路 3- ACM 实现 原题连接&#xff1a;226. 翻转二叉树 1- 思路 Queue 队列实现层序遍历 交换左右 1- 借助 Queue 实现层序遍历2- 实现左右交换方式 2- 实现 ⭐226. 翻转二叉树——题解思…

带你玩转小程序推广,实现短链接一键跳转

不知道各位有没有想过&#xff0c;短链接直接跳转到微信小程序到底该怎么操作呢&#xff1f;掌握这个小技能&#xff0c;能让你的推广效率大幅提升哦。今天就给大家分享一个全新方法&#xff0c;教你如何从短链接直接跳转到微信小程序&#xff0c;实现高效的一键式跨越。 一、…

源代码怎么进行加密?2024年10款源代码加密软件推荐

在软件开发中&#xff0c;源代码是企业的核心资产&#xff0c;其安全性直接关系到企业的竞争力和商业机密。为了防止源代码被未授权访问、复制或篡改&#xff0c;源代码加密成为了一种常见的安全措施。2024年&#xff0c;随着技术的发展&#xff0c;市场上出现了多种源代码加密…

笔记-系统规划与管理师-案例题-2023年-服务运营管理

【说明】 小李是跨国公司新任命的IT服务经理&#xff0c;帮助提升中国区总部的IT服务管理水平。中国区总部的运维管理体系运营了近三年&#xff0c;内外部环境发生了很多变化&#xff0c;其中: &#xff08;1&#xff09;内部变化包括团队组织结构调整、部分团队精简改为外包支…

纯前端导出excel插件pikaz-excel-js使用小结

最近项目有多个报表开发并前端导出为excel的需求&#xff0c;第一张报表用的是pikaz-excel-js插件&#xff0c;git地址为https://github.com/pikaz-18/pikaz-excel-js&#xff0c;网上文档虽然多&#xff0c;但很多都很基础&#xff0c;官方文档介绍也很简单&#xff0c;没有很…

搜维尔科技:‌Manus VR手套通过触觉反馈技术与机器人进行互动

‌Manus VR手套通过触觉反馈技术与机器人进行互动。‌这种技术允许用户通过手套与机器人进行复杂的动作遥操作和训练&#xff0c;使得用户能够通过手套的动作来控制机器人的运动&#xff0c;同时机器人执行的动作也可以通过手套的触觉反馈功能传达给用户&#xff0c;使用户能够…

线索分析2个要点分析:营销归因与市场ROI转化效果评估

1、营销归因 在复杂的大数据时代&#xff0c;消费者能接触的渠道、设备越来越多&#xff0c;营销活动分析也变得越来越复杂。 在当前的营销环境中&#xff0c;了解并优化营销策略是至关重要的。一个关键的部分是通过分析不同营销活动如何促成商机并赢得订单。而要实现这一目标…

秸秆焚烧自动监测摄像机

秸秆焚烧是一种常见的农业废弃物处理方式&#xff0c;但同时也会产生大量的空气污染物&#xff0c;对环境和人类健康造成威胁。为了监测和控制秸秆焚烧的情况&#xff0c;可以使用秸秆焚烧自动监测摄像机。秸秆焚烧自动监测摄像机 是一种结合了人工智能和机器视觉技术的智能设备…

Linux入门——04 gbd git

gbd命令行调试 默认情况下&#xff0c;GDB无法对现在发布的程序进行调试 debug&#xff08;能调试&#xff09;&&release&#xff08;不能调试&#xff09; linux下GCC或G生成软件默认是release的&#xff01; 1.debug模式 gcc -o mytest mytest.c -g 文件的体积不…