小白的进阶之路系列之六----人工智能从初步到精通pytorch数据集与数据加载器

article/2025/8/24 20:36:17

本文将介绍以下内容:

数据集与数据加载器

数据迁移

如何建立神经网络

数据集与数据加载器

处理数据样本的代码可能会变得混乱且难以维护;理想情况下,我们希望我们的数据集代码与模型训练代码解耦,以获得更好的可读性和模块化。PyTorch提供了两个数据原语:torch.utils.data.DataLoader和torch.utils.data.Dataset,它们允许你使用预加载的数据集和你自己的数据。Dataset存储了样本及其相应的标签,DataLoader在Dataset周围包装了一个可迭代对象,以便于访问样本。

PyTorch域库提供了许多预加载的数据集(如FashionMNIST),这些数据集是torch.utils.data.Dataset的子类,并实现了特定数据的特定函数。它们可用于原型化和基准化模型。你可以在这里找到它们:图像数据集,文本数据集和音频数据集

加载数据集

下面是一个如何从TorchVision加载Fashion-MNIST数据集的示例。Fashion-MNIST是Zalando文章图像的数据集,由60,000个训练样例和10,000个测试样例组成。每个示例都包含一个28×28灰度图像和来自10个类之一的关联标签。

我们用以下参数加载FashionMNIST数据集:

  • root是存储训练/测试数据的路径,

  • Train指定训练或测试数据集,

  • download=True从互联网上下载数据,如果它在根不可用。

  • Transform和target_transform指定特征和标签转换

import torch
from torch.utils.data import Dataset
from torchvision import datasets
from torchvision.transforms import ToTensor
import matplotlib.pyplot as plttraining_data = datasets.FashionMNIST(root="data",train=True,download=True,transform=ToTensor()
)test_data = datasets.FashionMNIST(root="data",train=False,download=True,transform=ToTensor()
)

迭代和可视化数据集

我们可以像列表一样手动索引数据集:training_data[index]。我们使用matplotlib来可视化训练数据中的一些样本。

labels_map = {0: "T-Shirt",1: "Trouser",2: "Pullover",3: "Dress",4: "Coat",5: "Sandal",6: "Shirt",7: "Sneaker",8: "Bag",9: "Ankle Boot",
}
figure = plt.figure(figsize=(8, 8))
cols, rows = 3, 3
for i in range(1, cols * rows + 1):sample_idx = torch.randint(len(training_data), size=(1,)).item()img, label = training_data[sample_idx]figure.add_subplot(rows, cols, i)plt.title(labels_map[label])plt.axis("off")plt.imshow(img.squeeze(), cmap="gray")
plt.show()

输出为:

在这里插入图片描述

为文件创建自定义数据集

自定义Dataset类必须实现三个函数:initlen__和__getitem。看看这个实现;FashionMNIST图像存储在目录img_dir中,它们的标签单独存储在CSV文件annotations_file中。

在接下来的部分中,我们将分解这些函数中发生的事情。

class CustomImageDataset(Dataset):def __init__(self, annotations_file, img_dir, transform=None, target_transform=None):self.img_labels = pd.read_csv(annotations_file)self.img_dir = img_dirself.transform = transformself.target_transform = target_transformdef __len__(self):return len(self.img_labels)def __getitem__(self, idx):img_path = os.path.join(self.img_dir, self.img_labels.iloc[idx, 0])image = read_image(img_path)label = self.img_labels.iloc[idx, 1]if self.transform:image = self.transform(image)if self.target_transform:label = self.target_transform(label)return image, label

init

__init__函数在实例化Dataset对象时运行一次。我们初始化包含图像、注释文件和两个转换(下一节将详细介绍)的目录。

def __init__(self, annotations_file, img_dir, transform=None, target_transform=None):self.img_labels = pd.read_csv(annotations_file

http://www.hkcw.cn/article/qjxrECIIbf.shtml

相关文章

Memory Repair (二)

Implementing BIRA and BISR Logic 本节介绍如何在 circuit 中插入 repair logic。重点是插入 BISR 逻辑。只要内存库文件中存在 RepairAnalysis 包装器,并且该实例的 repair_analysis_present 属性未设置为 “Off”,就会在内存 BIST 逻辑(控…

Vue 3 的路由管理

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、简易路由器二、Vue Router创建路由器使用路由器创建页面前言 路由指的是通过不同 URL 访问不同页面的方式。 根据路由管辖权的归属不同,可以分为前端路由(Client-Side Routing)和后端路由(Server-Side Routing)。…

油猴脚本开发基础

1. 油猴脚本深度解析 1.1 什么是油猴脚本? 本质:基于JavaScript的浏览器扩展脚本工作原理:在网页加载时注入自定义JS代码核心能力: 修改DOM结构拦截网络请求操作浏览器API存储本地数据 应用场景: 广告屏蔽网页功能增…

练习:对象数组 1

定义数组存储 3 个商品对象。商品的属性:商品的 id,名字,价格,库存。创建三个商品对象,并把商品对象存入到数组当中。 //对象数组 1 package demo01; public class Goods {private int goodsid;private String goodsN…

Baklib知识中台驱动业务创新

知识中台构建四库体系 Baklib通过打造知识资源库、案例库、规则库及专家库四大核心模块,构建起企业级知识中台的底层架构。其中,知识资源库采用多维度标签体系对文档、报告等结构化与非结构化数据进行分类存储;案例库通过智能抽取技术沉淀业…

“文化人”董宇辉也学会了表演 为消费者争取福利

“文化人”董宇辉也学会了表演 为消费者争取福利。董宇辉在直播间开始“表演”与品牌商谈判的戏码。最近,他在销售某品牌电视时,商家表示要收取最高200元的安装费。董宇辉当场拒绝,表示不合理,并坚持不接受收费。最终,商家负责人现场沟通后决定为所有购买电视的朋友免费安…

H5通用模态框可滚动弹框

弹框要求&#xff1a; 1、弹框图片宽高不限制&#xff0c;自适应 2、关闭按钮固定在图片下方 3、长图时弹框图片可滚动&#xff0c;遮罩层固定 4、点击遮罩层可关闭按钮&#xff0c;不冒泡 图例&#xff1a; 代码 <div class"image-modal" v-if"curSideI…

代码随想录打卡|Day51 图论(dijkstra(堆优化版)精讲、Bellman_ford 算法精讲)

图论part09 dijkstra&#xff08;堆优化版&#xff09;精讲(不熟悉) 代码随想录链接 题目链接 import java.util.*;class Edge {int to; // 邻接顶点int val; // 边的权重Edge(int to, int val) {this.to to;this.val val;} }class MyComparison implements Comparator<…

RS232/485转Profinet网关通讯气体检漏仪案例分享

RS232/485转Profinet网关通讯气体检漏仪案例分享 RS232转Profinet网关作为一种重要的工业通讯设备&#xff0c;其作用是将传统的RS232接口设备转换为现代的Profinet接口&#xff0c;从而实现与现代自动化控制系统的无缝对接&#xff0c;提高系统的集成度和性能。 气体检漏仪作…

电感专题归纳

文章目录 6.2.1 概念6.2.1x 电感电流6.2.2 储能6.2.3 伏秒原则6.2.4 电感元件6.2.5 电感充放电 6.3 换路定则6.4 储能总结6.5 串并联6.5.1 电容串联6.5.2 电容并联6.5.4 电感串联6.5.5电感并联6.5.3 电容与电导 6.6 电容与电感的滤波 电感在电路中的坐拥只有两个字&#xff0c;…

2023-ICLR-ReAct 首次结合Thought和Action提升大模型解决问题的能力

关于普林斯顿大学和Google Research, Brain Team合作的一篇文章, 在语言模型中协同Reasoning推理和Action行动。 论文地址&#xff1a;https://arxiv.org/abs/2210.03629 代码&#xff1a;https://github.com/ysymyth/ReAct.git 其他复现 langchain &#xff1a;https://pytho…

吴艳妮落泪道歉 带伤参赛憾失金牌

5月29日,在亚洲田径锦标赛女子100米栏决赛中,吴艳妮以13秒07的成绩获得铜牌。赛后她走路有些一瘸一拐。在接受采访时,吴艳妮哽咽着向大家道歉:“很感谢你们来现场为我加油,没为中国队拿到这个冠军,很对不起大家。我的伤还没养好,不想为自己过多的解释,我还是觉得我在亚…

群辉(synology)NAS老机器连接出现网页端可以进入,但是本地访问输入一样的账号密码是出现错误时解决方案

群辉&#xff08;synology&#xff09;NAS老机器连接出现网页端可以进入&#xff0c;但是本地访问输入一样的账号密码是出现错误时解决方案 老机器 装的win7 系统 登入后端网页端的时候正常&#xff0c;但是本地访问登入时输入登入网页端一样的密码时候出现问题解决方案 1.登…

力扣每日一题——连接两棵树后最大目标节点数目 ||

目录 题目链接&#xff1a;3373. 连接两棵树后最大目标节点数目 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 解法一&#xff1a;​​双树贡献分离法​​ Java写法&#xff1a; C写法&#xff1a; 运行时间 时间复杂度和空间复杂度 总结 题目链接&#xff1a;…

国芯思辰| 国产四通道24位生理电采集模拟前端AFE全面替换ADS1294R,心电贴性能再飞跃

心电贴作为一种便捷的可穿戴医疗设备&#xff0c;能够实时、连续地监测心电信号&#xff0c;为心脏健康保驾护航。其中高性能、低功耗的AFE芯片是关键核心部件&#xff0c;集成国产四通道24位AFE的三导联心电贴&#xff0c;不仅更小、更轻、还更准、续航更长、监测维度更多&…

Linux线程池(上)(33)

文章目录 前言一、线程池的概念池化技术线程池的优点线程池的使用场景 二、线程池的实现v1版本v2版本 总结 前言 终于要结束了&#xff0c;写完这篇再来篇有关锁的文章&#xff0c;我们就可以结束 Linux系统编程 部分啦&#xff01; 线程池是一种管理线程的机制&#xff0c;它可…

Python 之图片添加时间戳水印

依赖安装 pip install pillow 原图 随便找个图片作为原图即可&#xff08;比如截图一个桌面背景图&#xff09;。 test.png 添加水印 from PIL import Image, ImageDraw, ImageFont import datetimedef add_timestamp_watermark(image_path, font_size24):# 打开图片imag…

jenkins集成gitlab实现自动构建

jenkins集成gitlab实现自动构建 前面我们已经部署了Jenkins和gitlab&#xff0c;本文介绍将二者结合使用 项目源码上传至gitee提供公网访问&#xff1a;https://gitee.com/ye-xiao-tian/my-webapp 1、创建一个群组和项目 2、添加ssh密钥 #生成密钥 [rootgitlab ~]# ssh-keyge…

深入了解linux系统—— 库的链接和加载

一、目标文件 我们知道源文件经过编译链接形成可执行程序&#xff0c;在Windows下这两个步骤被IDEA封装的很完美&#xff0c;我们使用起来也非常方便&#xff1b; 在Linux中&#xff0c;我们可以通过gcc编译器来完成编译链接这一系列操作。 而源文件经过编译形成.o文件&…

Cesium 8 ,在 Cesium 上实现雷达动画和车辆动画效果,并控制显示和隐藏

目录 ✨前言 一、功能背景 1.1 核心功能概览 1.2 技术栈与工具 二、车辆动画 2.1 模型坐标 2.2 组合渲染 2.3 显隐状态 2.4 模型文件 三、雷达动画 3.1 创建元素 3.2 动画解析 3.3 坐标联动 3.4 交互事件 四、完整代码 4.1 属性参数 4.2 逻辑代码 加载车辆动画…