torchvision中数据集的使用

1、torchvision及其数据集的介绍

1.1 torchvision介绍

  torchvision 是 PyTorch 的一个官方库,专门用于计算机视觉任务。它提供了以下核心功能:

  • 预训练模型:如 ResNet、VGG、EfficientNet 等。
  • 数据集:内置常用视觉数据集(如 MNIST、CIFAR、ImageNet)。
  • 数据转换工具:用于图像预处理和数据增强(如裁剪、旋转、归一化)。
  • 工具函数:如张量转换、可视化等。

torchvision库的官方文档:torchvision库的官方文档

1.2 torchvision 中的数据集

torchvision.datasets 模块包含多个经典数据集,可直接下载并使用(torchvision.dataset模块数据集文档)。以下是常用数据集及其特点:

  1. MNIST
    描述:手写数字(0-9)灰度图像。
    样本:60,000 训练 + 10,000 测试。
    图像大小:28×28 像素。
    用途:入门级分类任务。
    加载示例:
from torchvision import datasets
train_data = datasets.MNIST(root='./data', train=True, download=True)

MNIST文档

  1. CIFAR-10 / CIFAR-100
    描述:
    CIFAR-10:10 类彩色图像(飞机、猫等)。
    CIFAR-100:100 细分类别。
    样本:50,000 训练 + 10,000 测试。
    图像大小:32×32 像素。
    用途:小图像分类基准。
    加载示例:
cifar10 = datasets.CIFAR10(root='./data', train=True, download=True)

CIFAR-10文档
CIFAR-100文档

  1. ImageNet
    描述:大规模图像分类数据集(1,000 类)。
    样本:约 120 万训练 + 50,000 验证。
    图像大小:可变(需调整至相同尺寸)。
    注意:需手动下载数据(非直接通过 torchvision)。
    加载示例:
imagenet = datasets.ImageNet(root='./data', split='train')

ImageNet文档

  1. FashionMNIST
    描述:时尚单品(衣服、鞋等)灰度图像,替代 MNIST。
    样本:同 MNIST。
    用途:比 MNIST 更具挑战性的分类。

FashionMNIST文档

  1. COCO
    描述:目标检测、分割、字幕生成数据集。
    样本:超 20 万标注图像。
    加载示例:
coco = datasets.CocoDetection(root='./data', annFile='annotations.json')

COCO文档

  1. 其他数据集
    KITTI:自动驾驶场景(检测、深度估计)。
    SVHN:街景门牌号数字识别。
    CelebA:人脸属性识别(20 万名人图像)。

通用数据加载方法
所有数据集可通过 torch.utils.data.DataLoader 批量加载:

from torchvision import datasets, transforms
from torch.utils.data import DataLoadertransform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])train_data = datasets.MNIST(root='./data', train=True, transform=transform)
train_loader = DataLoader(train_data, batch_size=32, shuffle=True)

关键点总结

  • 内置数据集:直接通过 datasets.XYZ 调用,自动下载(部分需手动准备)。
  • 数据增强:配合 transforms 模块实现标准化、翻转等操作。
  • 灵活扩展:支持自定义数据集(继承 torch.utils.data.Dataset)。

通过 torchvision,用户可以快速实验模型,无需重复实现数据预处理流程。

二、使用实例

2.1 CIFAR-10 dataset介绍

2.1.1 数据集内容介绍

Torchvision 中的 CIFAR-10 是一个经典的计算机视觉数据集,广泛用于图像分类任务的基准测试。

  1. 数据集概述
    名称:CIFAR-10(Canadian Institute For Advanced Research)
    用途:图像分类(10个类别)
    数据内容:
    60,000 张 32x32 像素的彩色图像(RGB)。
    分为 50,000 张训练图像和 10,000 张测试图像。
    均匀分布在 10 个类别中,每个类别有 6,000 张图像。

  2. 类别标签
    10 个类别分别为:
    飞机(airplane)、汽车(automobile)、鸟(bird)、猫(cat)、鹿(deer)、
    狗(dog)、青蛙(frog)、马(horse)、船(ship)、卡车(truck)。

  3. 在 Torchvision 中的使用方法

加载数据集

import torchvision
import torchvision.transforms as transforms# 定义数据预处理(标准化、Tensor转换等)
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])# 下载并加载训练集和测试集
train_dataset = torchvision.datasets.CIFAR10(root='./data',          # 数据保存路径train=True,             # 加载训练集download=True,          # 如果本地不存在则下载transform=transform     # 应用预处理
)test_dataset = torchvision.datasets.CIFAR10(root='./data',train=False,download=True,transform=transform
)

数据加载器(DataLoader)

from torch.utils.data import DataLoadertrain_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)
  1. 数据集特点
  • 图像尺寸小:32x32 像素,适合快速实验和算法验证。
  • 低分辨率挑战:由于尺寸小,细节较少,对模型的特征提取能力要求较高。
  • 标准化数据:通常需要归一化到 [-1, 1] 或 [0, 1] 范围。
  1. 常见用途
  • 基准测试:用于对比不同模型的分类性能(如ResNet、VGG等)。
  • 教学示例:深度学习入门常用的“Hello World”级数据集(类似MNIST的彩色版)。
  1. 扩展功能
  • 数据增强:通过 transforms 动态增强训练数据:
  • 数据增强实验:可通过 torchvision.transforms 添加旋转、翻转等操作。
transform_train = transforms.Compose([transforms.RandomHorizontalFlip(),transforms.RandomRotation(10),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])
  • 与CIFAR-100的关系:Torchvision 还提供 CIFAR-100 数据集,包含 100 个细粒度类别,每类 600 张图像。
  1. 注意事项
  • 下载问题:若国内下载慢,可手动下载并解压到 root 指定路径(官方链接)。
  • 内存占用:全部加载后约占 ~200MB 内存,适合大多数设备。

CIFAR-10数据集介绍:CIFAR-10数据集

2.1.2 数据集使用语法

基本语法

torchvision.datasets.CIFAR10(root: Union[str, Path], train: bool = True, transform: Optional[Callable] = None, target_transform: Optional[Callable] = None, download: bool = False)

参数说明

  • root (str 或 pathlib.Path) – 数据集的根目录,其中目录 cifar-10-batches-py 存在,如果 download 设置为 True,则将保存到该 cifar-10-batches-py 中。
  • train (bool, optional) – 如果为 True,则从训练集创建数据集,否则从测试集创建。
  • transform (callable, optional) (转换) – 接收 PIL 图像并返回转换后的版本的函数/转换。例如,transforms.RandomCrop
  • target_transform (callable, optional) – – 接收目标并对其进行转换的函数/转换。
  • download (bool, optional) – 如果为 true,则从 Internet 下载数据集并将其放入根目录中。如果数据集已下载,则不会再次下载。

Special-members:

__getitem__(index: int) → Tuple[Any, Any]

Parameters: 参数

  • index (int) – Index

Returns: 结果

  • (image, target) where target is index of the target class.

Return type: 返回类型 :

  • tuple

2.2 CIFAR-10 dataset使用实例

2.2.1 创建数据集实例

import torchvisiontrain_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])
print(test_set.classes)img, target = test_set[0]
print(img)
print(target)
print(test_set.classes[target])
img.show()

运行结果:

(<PIL.Image.Image image mode=RGB size=32x32 at 0x1CC0CC19AF0>, 3)
['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
<PIL.Image.Image image mode=RGB size=32x32 at 0x1CC0CC19AF0>
3
cat

结果表示索引数据集返回的是一个PIL类型的图像以及一个整数target,该整数表示某个类如cat。在classes属性中存放了一个类列表,target作为列表的下标代表对应的类。

image.show()显示图片:
在这里插入图片描述

2.2.2 使用transform操作

复习:Pytorch中的Transforms学习

使用transform操作对对数据集统计进行处理:

import torchvisiondataset_transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor()
])train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, transform=dataset_transform, download=False)
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, transform=dataset_transform, download=False)img, target = test_set[0]
print(img)
print(target)
print(test_set.classes[target])

再次运行:

tensor([[[0.6196, 0.6235, 0.6471,  ..., 0.5373, 0.4941, 0.4549],[0.5961, 0.5922, 0.6235,  ..., 0.5333, 0.4902, 0.4667],[0.5922, 0.5922, 0.6196,  ..., 0.5451, 0.5098, 0.4706],...,[0.2667, 0.1647, 0.1216,  ..., 0.1490, 0.0510, 0.1569],[0.2392, 0.1922, 0.1373,  ..., 0.1020, 0.1137, 0.0784],[0.2118, 0.2196, 0.1765,  ..., 0.0941, 0.1333, 0.0824]],[[0.4392, 0.4353, 0.4549,  ..., 0.3725, 0.3569, 0.3333],[0.4392, 0.4314, 0.4471,  ..., 0.3725, 0.3569, 0.3451],[0.4314, 0.4275, 0.4353,  ..., 0.3843, 0.3725, 0.3490],...,[0.4863, 0.3922, 0.3451,  ..., 0.3804, 0.2510, 0.3333],[0.4549, 0.4000, 0.3333,  ..., 0.3216, 0.3216, 0.2510],[0.4196, 0.4118, 0.3490,  ..., 0.3020, 0.3294, 0.2627]],[[0.1922, 0.1843, 0.2000,  ..., 0.1412, 0.1412, 0.1294],[0.2000, 0.1569, 0.1765,  ..., 0.1216, 0.1255, 0.1333],[0.1843, 0.1294, 0.1412,  ..., 0.1333, 0.1333, 0.1294],...,[0.6941, 0.5804, 0.5373,  ..., 0.5725, 0.4235, 0.4980],[0.6588, 0.5804, 0.5176,  ..., 0.5098, 0.4941, 0.4196],[0.6275, 0.5843, 0.5176,  ..., 0.4863, 0.5059, 0.4314]]])
3
cat

可以发现,PIL图像转换为tensor格式了。

2.2.3 使用Tensorboard记录

复习:Pytorch中Tensorboard的学习

使用for循环,将测试集中的前10张张量格式的图片添加到日志中:writer.add_image(“test_set”, img, i)

import torchvision
from torch.utils.tensorboard import SummaryWriterdataset_transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor()
])train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, transform=dataset_transform, download=False)
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, transform=dataset_transform, download=False)writer = SummaryWriter("runs")
for i in range(10):img, target = test_set[i]writer.add_image("test_set", img, i)writer.close()

运行结束后,在终端执行命令:

tensorboard --logdir=E:\my_pycharm_projects\project1\runs
TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.19.0 at http://localhost:6006/ (Press CTRL+C to quit)

打开网址:
在这里插入图片描述

CIFAR-10使用说明:CIFAR使用语法说明

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

d2025328

一、sql-判断三角形 610. 判断三角形 - 力扣&#xff08;LeetCode&#xff09; 用一下if加上判断条件 select x,y,z,if(xy > z and xz > y and yz > x and x-y < z and x-z < y and y-z < x,Yes,No) as triangle from Triangle 二、按照分类统计薪水 190…

C++20新特性:std::assume_aligned详解

文章目录 一、概述二、函数定义与语法三、使用方法与注意事项1. 使用方法2. 注意事项 四、性能优化原理五、实际应用场景六、编译器支持情况七、总结 一、概述 C20引入了std::assume_aligned&#xff0c;这是一个非常实用的特性&#xff0c;用于告知编译器某个指针所指向的对象…

洛谷P1706 全排列题解

P1706 全排列问题 题目描述 按照字典序输出自然数 1 1 1 到 n n n 所有不重复的排列&#xff0c;即 n n n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n n n。 输出格式 由 1 ∼ n 1 \sim n 1∼n 组成的所有不重复的…

yum install 报错(CentOS换源):

yum instally yum utils device mapper persistent-data lvm2 报错&#xff1a; 排查错误原因&#xff1a;centos7 系统停止维护了 解决方案&#xff1a;换源&#xff08;更换操作系统&#xff09; //1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-…

C语言学习笔记(抱佛脚版)

毕业一年&#xff0c;发现记性是真的差&#xff0c;每次想起之前的知识总是想不全&#xff0c;看别人写的资料也懵懵懂懂。于是我索性自己再学一遍&#xff0c;并且记录一下。希望对你们也有所帮助。 正片开始&#xff01; 前面的什么if for都不难理解&#xff0c;嵌套的话也…

攻破tensorflow,勇创最佳agent(2)---损失(loss) 准确率(accuracy)问题

实战播: 怎么判定一个模型好不好,你设置的值对不对? 需要再看几个值: 例如: model Sequential()for units in model_structure:model.add(Dense(units, activationrelu))model.add(Dropout(train_config.get(dropout_rate, 0.3)))model.add(Dense(1, activationsigmoid)) 他…

Docker-Volume数据卷详讲

Docker数据卷-Volume 一&#xff1a;Volume是什么&#xff0c;用来做什么的 当删除docker容器时&#xff0c;容器内部的文件就会跟随容器所销毁&#xff0c;在生产环境中我们需要将数据持久化保存&#xff0c;就催生了将容器内部的数据保存在宿主机的需求&#xff0c;volume …

使用Selenium和lxml库搜房网爬取某地区房屋信息(python、pycharm爬虫)

一、地址&#xff1a; url "https://zb.newhouse.fang.com/house/s/b91" # 第一页的 URL 但是这个爬虫我不知道为啥总是翻不了页数&#xff0c;请帮忙修改一下~ 二、用到的知识点以及代码详解&#xff1a; 这段代码是一个使用Selenium和lxml库实现的网页爬虫&a…

ai画图comfyUI 精准定位gligen。允许指定图像中多个对象的位置和大小

基础功能下&#xff0c;outpainting是内容填充&#xff0c;拉近拉远镜头&#xff0c;自动填充旁边物体。嵌入模型也需要单独下载&#xff0c;演示完示例后推荐模型站有更直观效果介绍和用法。选中精确定位。看一眼坐标&#xff0c;直接默认出一张图。然后修改定位&#xff0c;和…

如何自动化同义词并使用我们的 Synonyms API 进行上传

作者&#xff1a;来自 Elastic Andre Luiz 了解如何使用 LLM 来自动识别和生成同义词&#xff0c; 使术语可以通过程序方式加载到 Elasticsearch 同义词 API 中。 提高搜索结果的质量对于提供高效的用户体验至关重要。优化搜索的一种方法是通过同义词自动扩展查询词。这样可以更…

boost.asio

as&#xff08;async&#xff09;:异步 同步io&#xff1a; reactor (非阻塞)&#xff08;需要注册一次&#xff0c;在等待消息时可以干别的事&#xff09; 阻塞io网络模型 接口&#xff1a;read\accept\connect\write 接口返回时&#xff0c;io完成 异步…

数据库后续

-- 添加作者字段 alter table t_hero add author varchar(100); -- 更新数据 update t_hero set author "曹雪芹" where id 1; update t_hero set author "曹雪芹" where id 2; update t_hero set author "曹雪芹" where id 3; upd…

计算机网络基础:网络流量工程与优化策略

计算机网络基础:网络流量工程与优化策略 一、前言二、网络流量工程基础2.1 网络流量工程的定义与目标2.2 网络流量的测量与分析2.2.1 常用的流量测量方法2.2.2 流量数据分析三、网络流量工程的优化策略3.1 链路负载均衡策略3.1.1 基于目的地址的负载均衡3.1.2 基于流量权重的负…

H5DS编辑器教程——H5页面触发动画实战指南

在 H5 页面设计中&#xff0c;触发动画通过动态交互提升用户体验&#xff0c;成为吸引注意力的关键手段。H5DS 编辑器作为一款高效的可视化工具&#xff0c;提供了丰富的动画制作功能&#xff0c;即使是零基础用户也能轻松实现专业级效果。 使用工具&#xff1a;H5DS编辑器 触…

什么是具身智能

具身智能&#xff08;Embodied Intelligence&#xff09;是人工智能与机器人学交叉的前沿领域&#xff0c;强调智能体通过身体与环境的动态交互实现自主学习和进化&#xff0c;其核心在于将感知、行动与认知深度融合‌。通俗地讲&#xff0c;就是机器人或者智能系统在物理环境中…

Java实现pdf中动态插入图片

今天接到一个需求&#xff0c;需要在pdf中的签名处&#xff0c;插入签名照片&#xff0c;但签名位置不固定&#xff0c;话不多说上代码&#xff1a; 1、首先引入itextpdf依赖包&#xff1a; <dependency><groupId>com.itextpdf</groupId><artifactId>…

MySQL8.4 InnoDB Cluster高可用集群使用指南

简介 高可用方案 Orchestrator&#xff1a; 可视化 Web 界面管理 MySQL 拓扑结构&#xff0c;并且兼容多种复制架构&#xff08;异步、半同步、GTID&#xff09;&#xff0c;提供自动和手动的故障转移。但是8.0.21后 MySQL 更新了主从复制相关命令&#xff0c;Orchestrator无…

从泛读到精读:合合信息文档解析如何让大模型更懂复杂文档

从泛读到精读&#xff1a;合合信息文档解析如何让大模型更懂复杂文档 一、引言&#xff1a;破解文档“理解力”瓶颈二、核心功能&#xff1a;合合信息的“破局”亮点功能亮点1&#xff1a;复杂图表的高精度解析图表解析&#xff1a;为大模型装上精准“标尺”表格数据精准还原 功…

git:远程仓库拉取到本地,fork到本地,修改后再上传

讲述仓库成员拉取远程仓库&#xff08;即组长的仓库&#xff0c;里面有成员&#xff09;到本地&#xff0c;修改内容再上传的详细步骤&#xff1a; 1.进入仓库&#xff0c;首先fork &#xff08;如不&#xff0c;所作操作会直接对远程仓库进行&#xff0c;不用管理员审核&…

windows清除电脑开机密码,可保留原本的系统和资料,不重装系统

前言 很久的一台电脑没有使用了&#xff0c;开机密码忘了&#xff0c;进不去系统 方法 1.将一个闲置u盘设置成pe盘&#xff08;注意&#xff0c;这个操作会清空原来u盘的数据&#xff0c;需要在配置前将重要数据转移走&#xff0c;数据无价&#xff0c;别因为配置这个丢了重…