社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

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

GIS研发 • 5 月前 • 181 次点击  

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=(10, 10))
# 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