Py学习  »  机器学习算法

PyTorch深度学习实战(6)——神经网络性能优化技术(a)

GIS研发 • 2 月前 • 115 次点击  

FashionMIIST 数据集是一个用于图像分类任务的经典数据集,它包含了10 个类别的时尚服饰图像。每个样本都是一张 28x28 像素的灰度图像,总共有60000 个训练样本和10000 个测试样本。由于其简单易用的特点,Fashion MNIST数据集已经成为学术界和研究员常用的基准数据集之一,可以用于验证图像分类算法的性能。

1.数据准备

# 1. 导入必要的库from torchvision import datasets  # 提供经典数据集(如FashionMNIST)import torch                      # PyTorch核心库,用于张量操作
# 2. 设置数据下载/保存的文件夹路径(可自定义)data_folder = './data/FMNIST'
# 3. 加载 Fashion-MNIST 训练集#    - download=True: 如果本地没有数据则自动从网上下载#    - train=True: 加载训练集(60000张图),False则是测试集(10000张)fmnist = datasets.FashionMNIST(data_folder, download=True, train=True)
# 4. 提取训练集的图像张量和标签张量tr_images = fmnist.data   # 形状: [60000, 28, 28] → 60000张 28x28 灰度图tr_targets = fmnist.targets  # 形状: [60000] → 每个元素是0~9的类别编号
# 5. 查看标签中有哪些不同的值(即类别编号:0,1,...,9)unique_values = tr_targets.unique()print(f'tr_images & tr_targets:\n\tX - {tr_images.shape}\n\tY - {tr_targets.shape}\n\tY - Unique Values : {unique_values}')print(f'TASK:\n\t{len(unique_values)} class Classification')print(f'UNIQUE CLASSES:\n\t{fmnist.classes}')  # 输出10个类别名称(T恤、裤子等)
# 6. 导入绘图库import matplotlib.pyplot as pltimport numpy as np
# 7. 设置子图的行数和列数#    行数 = 类别总数(10类),列数 = 每类展示10张随机图片R, C = len(tr_targets.unique()), 10   # R=10, C=10
# 8. 创建一个 10行 x 10列 的子图网格,整体画布大小为 10x10 英寸fig, ax = plt.subplots(R, C, figsize=(1010))
# 9. 外层循环:遍历每一个类别(0 ~ 9)#    enumerate(ax) 返回 (索引, 该行所有子图对象)for label_class, plot_row in enumerate(ax):    # 找出训练集中所有属于当前类别 label_class 的图片索引    # np.where(条件) 返回元组,取 [0] 得到索引数组    label_x_rows = np.where(tr_targets == label_class)[0]
    # 内层循环:遍历当前行中的每一个子图(共10列)    for plot_cell in plot_row:        # 关闭子图的网格线和坐标轴,让图片显示更干净        plot_cell.grid(False)        plot_cell.axis('off')
        # 从当前类别的所有图片索引中随机选择一个(可重复,因为类别样本数远大于10)        ix = np.random.choice(label_x_rows)
        # 根据索引取出对应的图像 x 和标签 y(标签在此仅作示意,实际未使用)        x, y = tr_images[ix], tr_targets[ix]
        # 在子图中显示灰度图,使用 'gray' 颜色映射(0为黑,255为白)        plot_cell.imshow(x, cmap='gray')
# 10. 显示绘制好的图像(必须调用,否则图像不会弹出或出现在 Notebook 中)plt.show()

补充说明(供初学者理解)

  • Fashion-MNIST 是一个服装分类数据集,包含 10 个类别(如 T 恤、牛仔裤、包等),每张图片是 28×28 的灰度图。

  • torchvision.datasets.FashionMNIST 会自动下载并返回一个类似  Dataset 的对象,其中的 .data 和 .targets 分别是图像张量和标签张量。

  • 代码最后用 matplotlib 创建了一个 10 行 10 列的子图网格,每行对应一个类别,每行中的 10 个格子分别显示该类别下随机选取的 10 张不同图片,直观展示每个类别的样本。

  • 如果希望运行后看到图片,需要在代码末尾加上 plt.show()

相关:

PyTorch深度学习实战(5)——计算机视觉基础

PyTorch深度学习实战(4)--常用激活函数和损失函数详解

PyTorch深度学习实战(3)——使用PyTorch构建神经网络(b)

PyTorch深度学习实战(3)——使用PyTorch构建神经网络(a)

PyTorch深度学习实战(2)-PyTorch基础

示例:反向传播和梯度下降的计算过程

AI基础 | 前向传播

AI基础 | 反向传播

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/195847