李沐--图像分类数据集

文章详细介绍了torchvision库在计算机视觉任务中的作用,包括数据集下载、图像转换以及数据加载。特别是torchvision.transforms用于图片格式转换,d2l.use_svg_display()用于图像显示模式的选择,DataLoader用于批量处理数据,以及imshow函数在显示图像时对通道的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数和包详解:

1.torchvision:torch类型的可视化包,一般计算机视觉和数据可视化需要使用

2.from torchvision import transforms:这个组件经常用于图片的修改(一般数据集中的图片都是PIL格式,使用的时候需要转化为tensor,而在加入函数时常需要转化为nadarry)

3.d2l.use_svg_display():使用什么模式展示图片

4.torchvision.datasets:一般用于图像数据集的下载和获取

eg:torchvision.datasets.FashionMNIST( root=, train=True, transform=, download=True):train:是否为训练集, transform:使用什么转换方式(可以从transforms组件中选择),download:是否下载对应数据集。(.FashionMNIST可以更换为其他数据源)

5对4.对于获得的数据,一般是一个X对一个Y,X每个为(1,行,列){通道数:1(彩色图片是3),图片宽度,图片长度}。数据类型不是元组和列表,但是可以通过直接切片调用,且[i][0]为X,[i][1]为Y。

6.enumerate(zip(axes, imgs):enumerate():生成可以遍历的每个元素有对应序号(0,1,2,3...)的enumerate对象(一种迭代器)

zip():把多个向量按照每列对应的关系组成一个一个小元组

里面每个元素大概为i, (ax, img)形式

7._, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)。第一个参数是个图,一般不用;第二个axes类似于图片的索引的矩阵((行,列))

8。next(iter(data.DataLoader(mnist_train, batch_size=18)))。:next()可以对iter()中的迭代器(元组,列表)使用,一次取一个,没有for只取一次。

9.Dataloader中的数据不能直接索引调用,需要使用next加迭代器调用

10,imshow()可以接收二维,三维甚至多维数组。二维默认为一通道即灰度图像,三维需要在第三个维度指定图像通道数(必须是第三维)

11.subplots函数只能有两个位置参数,一个行数,一个列数。

实现历程:1.数据获取2,函数:标签和标签名对应3.函数:绘制图像列表4.读取小批量5.尝试定义一个可以更改图片比例的批量读取函数

<think>嗯,用户让我解释一段Python代码,是关于展示Fashion-MNIST数据集的。首先,我需要仔细看一下代码的结构和各个部分的作用。 首先,用户导入了d2lzh库并重命名为d2l。这个库应该是一个深度学习相关的工具库,可能来自《动手学深度学习》这本书。然后定义了一个函数show_fashion_mnist,参数是images和labels。 接下来,函数内部调用了d2l.use_svg_display(),应该是设置使用SVG格式显示图片,这样图片更清晰。然后是创建子图的部分,用d2l.plt.subplots生成了1行多列的图,数量由images的长度决定,figsize设置大小。这里可能有需要注意的地方,比如当images数量很多时,子图的布局会不会有问题? 然后循环遍历每个子图、图片和标签,使用imshow显示图片。这里需要注意img.view((28,28)),因为Fashion-MNIST的图片是28x28的,所以需要调整形状。然后设置标题为标签,并隐藏坐标轴。 需要确认用户是否了解这些方法的作用,比如imshow、set_title,以及如何操作坐标轴。此外,代码中没有显示plt.show(),可能是在d2l库内部处理了,或者用户需要在调用函数后手动显示。 用户可能的背景是正在学习深度学习或图像处理,使用《动手学深度学习》的教材。他们可能想了解如何可视化数据集中的图像,以及代码中各个步骤的意义。需要解释清楚每个函数和参数的作用,确保他们理解代码的运行流程和关键点。 另外,用户可能遇到的问题包括图片无法显示、子图排列不正确,或者标签显示错误。需要指出可能的注意事项,比如确保输入images和labels的长度一致,图片数据格式正确等。还有,d2lzh库是否需要额外安装,或者是否是特定的本,这也是用户可能遇到的潜在问题。</think>让我们逐步解析这段用于Fashion-MNIST数据集可视化的代码: ```python import d2lzh as d2l def show_fashion_mnist(images, labels): d2l.use_svg_display() # 设置SVG矢量图显示 _, figs = d2l.plt.subplots(1, len(images), figsize=(12, 12)) # 创建子图布局 for f, img, lbl in zip(figs, images, labels): f.imshow(img.view((28, 28)).numpy()) # 显示28x28图像 f.set_title(lbl) # 设置标签标题 f.axes.get_xaxis().set_visible(False) # 隐藏坐标轴 f.axes.get_yaxis().set_visible(False) ``` 逐层解释如下: 1. **模块导入** - `d2lzh`:《动手学深度学习》的配套工具库 - 提供封装好的可视化函数和数据集接口 2. **SVG显示设置** ```python d2l.use_svg_display() # 调用后会设置matplotlib使用矢量图输出 ``` - 矢量图比位图更清晰 - 自动执行`plt.rcParams['figure.figsize']`等配置 3. **子图创建** ```python _, figs = d2l.plt.subplots(1, N, figsize=(12,12)) ``` - 创建$1 \times N$的子图网格 - `figsize`设置总画布尺寸为$12\times12$英寸 - 返回的`figs`是包含N个子图对象的数组 4. **图像显示循环** ```python for f, img, lbl in zip(figs, images, labels): f.imshow(img.view((28,28)).numpy()) ``` - `img.view((28,28))`将一维张量转为$28\times28$矩阵 - `.numpy()`将PyTorch张量转为NumPy数组 - `imshow()`要求输入数组形状为$(H,W)$或$(H,W,3)$ 5. **样式设置** ```python f.set_title(lbl) # 显示服装类别标签 f.axes.get_xaxis().set_visible(False) # 隐藏坐标轴刻度 ``` - 通过`get_xaxis()`获取坐标轴对象 - `set_visible(False)`实现坐标轴隐藏 **调用示例**: ```python # 假设X是形状为(N,784)的图像数据,y是对应标签 show_fashion_mnist(X[0:9], y[0:9]) # 显示前9个样本 ``` **输出效果**: $$ \begin{cases} 9张28\times28的灰度服装图片\\ 每张图片顶部显示文字标签\\ 无坐标轴干扰的简洁排 \end{cases} $$ **注意事项**: 1. 输入`images`应为可迭代对象,每个元素是形状为784的一维数组 2. `labels`需要与`images`长度一致 3. 当显示图像超过10张时,建议调整`figsize`参数 4. 需要配合`matplotlib`的后端环境使用 该函数是数据探索阶段的常用工具,能直观验证数据集加载的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值