Fashion MNIST数据集介绍及基于Pytorch下载数据集

Fashion MNIST数据集介绍及基于Pytorch下载数据集


🌵文章目录🌵

  • 🌳引言🌳
  • 🌳Fashion MNIST数据集简介🌳
    • Fashion MNIST数据集的类别说明
    • Fashion MNIST数据集图片示例
  • 🌳基于PyTorch下载Fashion MNIST数据集🌳
  • 🌳使用Fashion MNIST数据集进行图像分类任务🌳
  • 🌳小结🌳
  • 🌳结尾🌳


🌳引言🌳

Fashion MNIST是深度学习和机器学习领域中一个非常流行且实用的数据集。它为初学者和研究者提供了一个挑战性的任务,以磨练他们的图像分类技能。本文将深入探讨Fashion MNIST数据集的背景、目的、使用方法和示例代码,帮助您更好地了解如何利用这个数据集进行图像分类任务。


🌳Fashion MNIST数据集简介🌳

Fashion MNIST是一个包含10个类别的服饰分类数据集,每个类别有7000个28x28像素的灰度图像。与MNIST数据集相比,Fashion MNIST在图像质量和多样性方面具有更高的挑战性,因为它包含了更多的背景和不同的视角。

Fashion MNIST数据集的类别说明


标签说明
0T恤(T-shirt)
1裤子(Trouser)
2套头衫(Pullover)
3连衣裙(Dress)
4外套(Coat)
5凉鞋(Sandal)
6衬衫(Shirt)
7运动鞋(Sneaker)
8包(Bag)
9靴子(Ankle boot)

Fashion MNIST数据集图片示例


在这里插入图片描述

图1 数据集示例


🌳基于PyTorch下载Fashion MNIST数据集🌳

在开始使用Fashion MNIST数据集之前,您需要先将其下载到本地计算机上。以下是使用Python和Pytorch库下载数据集的步骤:

  1. 确保已经安装了Python和Pytorch。您可以从Pytorch官网下载并安装最新版本的Pytorch。
  2. 导入所需的库:
import torch
from torchvision import datasets, transforms
  1. 下载训练数据集:
train_data = torchvision.datasets.FashionMNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)

这将在当前目录下创建一个名为“data”的文件夹,并将训练数据集下载到其中。如果您已经拥有数据集,并且想要跳过下载过程,请将download参数设置为False

  1. 下载测试数据集:
test_data = torchvision.datasets.FashionMNIST(root='./data', train=False, transform=transforms.ToTensor(), download=True)

同样,这将在“data”文件夹中提供测试数据集。

  1. 现在您已经成功下载了Fashion MNIST数据集,您可以使用Pytorch的数据加载器(DataLoader)来轻松加载数据。例如,以下代码将创建一个训练数据加载器:
from torch.utils.data import DataLoadertrain_loader = DataLoader(train_data, batch_size=32, shuffle=True)

这里,我们将批量大小设置为32,并启用了随机打乱功能。您可以根据需要调整这些参数。类似地,您可以为测试数据集创建一个加载器:

test_loader = DataLoader(test_data, batch_size=32, shuffle=False)

🌳使用Fashion MNIST数据集进行图像分类任务🌳

一旦您下载并准备好了数据集,就可以开始构建和训练图像分类模型了。以下是一个使用PyTorch构建简单卷积神经网络(CNN)进行图像分类的示例代码:

  1. 导入所需的库和模块:
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
from sklearn.model_selection import train_test_split
  1. 划分训练和测试数据集:

首先,我们需要将Fashion MNIST数据集划分为训练集和测试集。以下是一个简单的示例代码,用于将数据分为训练集和测试集:

# 将数据转换为Tensor格式并进行归一化处理(将像素值缩放到0-1之间)
transform = transforms.ToTensor()
train_data = TensorDataset(torch.tensor(train_data.data), train_data.targets) # targets表示图像对应的类别标签(0-9)
test_data = TensorDataset(torch.tensor(test_data.data), test_data.targets) # targets表示图像对应的类别标签(0-9)
train_loader = DataLoader(train_data, batch_size=32, shuffle=True) # 创建训练数据加载器,设置批量大小为32并【启用】随机打乱功能
test_loader = DataLoader(test_data, batch_size=32, shuffle=False) # 创建测试数据加载器,设置批量大小为32并【禁用】随机打乱功能3. 定义模型结构:
现在,我们可以定义一个简单的卷积神经网络(CNN)模型,用于图像分类任务。以下是一个示例代码,展示了如何使用PyTorch构建一个包含两个卷积层、一个全连接层的CNN模型:```python
class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)self.fc1 = nn.Linear(64 * 7 * 7, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = F.relu(self.conv1(x))x = F.relu(self.conv2(x))x = x.view(-1, 64 * 7 * 7) # 将卷积后的特征图展平,以便输入全连接层x = F.relu(self.fc1(x))x = self.fc2(x)return F.log_softmax(x, dim=1) # 使用log_softmax激活函数进行分类概率计算
  1. 训练模型:

接下来,我们将使用训练数据集对模型进行训练。以下是一个示例代码,展示了如何定义损失函数和优化器,以及如何训练模型:

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # 检查是否有可用的GPU,并定义设备(CPU或GPU)
model = SimpleCNN().to(device) # 将模型移动到设备上(CPU或GPU)
criterion = nn.CrossEntropyLoss() # 定义损失函数为交叉熵损失函数
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) # 定义优化器为随机梯度下降(SGD)优化器,设置学习率为0.001,动量为0.9# 训练模型
num_epochs = 10 # 设置训练轮数为10轮
for epoch in range(num_epochs):model.train() # 设置模型为训练模式running_loss = 0.0for i, data in enumerate(train_loader): # 使用训练数据加载器逐批获取数据和标签inputs, labels = data[0].to(device), data[1].to(device) # 将数据和标签移动到设备上(CPU或GPU)optimizer.zero_grad() # 将梯度清零outputs = model(inputs) # 前向传播,获取预测输出loss = criterion(outputs, labels) # 计算损失值loss.backward() # 反向传播,计算梯度值optimizer.step() # 更新权重参数running_loss += loss.item() # 累加损失值print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(train_loader))) # 输出当前轮次的平均损失值
  1. 测试模型:

经过训练后,我们需要使用测试数据集评估模型的性能。以下是一个示例代码,展示了如何使用测试数据加载器评估模型:

model.eval() # 设置模型为评估模式,关闭dropout和batch normalization等在训练模式下的特殊操作
correct = 0
total = 0
with torch.no_grad(): # 不需要计算梯度,以提高评估速度for data in test_loader: # 使用测试数据加载器逐批获取数据和标签images, labels = data[0].to(device), data[1].to(device) # 将数据和标签移动到设备上(CPU或GPU)outputs = model(images) # 前向传播,获取预测输出_, predicted = torch.max(outputs.data, 1) # 获取最大概率对应的类别标签作为预测结果total += labels.size(0) # 统计样本总数correct += (predicted == labels).sum().item() # 统计正确分类的样本数量print('Accuracy of the network on the test images: %d %%' % (100 * correct / total)) # 输出模型在测试数据集上的准确率

🌳小结🌳

Fashion MNIST是一个流行的机器学习数据集,主要用于服饰分类任务。它包含10个类别的7000个28x28像素的灰度图像,挑战性较高,因为涉及更多背景和视角。通过PyTorch,可以轻松下载并使用此数据集。一旦数据集准备好,可以使用CNN等模型进行图像分类。本文详细介绍了Fashion MNIST的背景、目的、使用方法和示例代码,为初学者和研究者提供了实用的指导和资源。


🌳结尾🌳

亲爱的读者,首先感谢抽出宝贵的时间来阅读我们的博客。我们真诚地欢迎您留下评论和意见💬
俗话说,当局者迷,旁观者清。的客观视角对于我们发现博文的不足、提升内容质量起着不可替代的作用。
如果博文给您带来了些许帮助,那么,希望能为我们点个免费的赞👍👍/收藏👇👇您的支持和鼓励👏👏是我们持续创作✍️✍️的动力
我们会持续努力创作✍️✍️,并不断优化博文质量👨‍💻👨‍💻,只为给带来更佳的阅读体验。
如果有任何疑问或建议,请随时在评论区留言,我们将竭诚为你解答~
愿我们共同成长🌱🌳,共享智慧的果实🍎🍏!


万分感谢🙏🙏点赞👍👍、收藏⭐🌟、评论💬🗯️、关注❤️💚~

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

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

相关文章

SpinrgBoot-Mybatis基础

​ JDBCMyBatis概述MyBatis基础应用MyBatis动态标签 一、JDBC( Java DataBase Connectivity ):Java连接数据库的解决方案 概念:JDBC就是Java后端操作数据库的解决方案,操作数据的指令应该来自于前端,前端把数据提交到后端Java代…

嵌入式软件中常见的 8 种数据结构

数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当…

UE4 C++ 静态加载类和资源

静态加载类和资源:指在编译时加载,并且只能在构造函数中编写代码 .h //增加所需组件的头文件 #include "Components/SceneComponent.h" //场景组件 #include "Components/StaticMeshComponent.h" //静态网格体组件 #include &qu…

Java 虚拟机

1.什么是 JVM? JVM——Java 虚拟机,它是 Java 实现平台无关性的基石。 Java 程序运行的时候,编译器将 Java 文件编译成平台无关的 Java 字节码文件(.class),接下来对应平台 JVM 对字节码文件进行解释,翻译成对应平台…

[Python] 如何在控制台进行输入输出

可莉今天带你来学习Python基础中在控制台的输入输出~ 接下来跟着可莉来学习吧~ 可莉将这篇博客收录在了:《Python》 可莉推荐的博主主页:Keven ’ s blog 目录 通过控制台输出 格式化输出 通过控制台输入 总结 通过控制台输出 我们通过print函数可以…

Electron+Vue3+Vite的产品级模板项目

1. electron-vue3-template 基于Vue3 Electron TypeScript的客户端程序模板,使用Vite和Electron Forge构建和打包。 真正做到开箱即用,面向跨平台客户端设计,产品级的项目模板。 项目地址: https://github.com/winsoft666/el…

最短路径 ( floyd) 算法

Floyd算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法。 算法思想: https://upimg.baike.so.com/doc/5450540-5688910.html 图演示: 代码实现: public void floyd() {int[] vertex graph.getVertex();int[][] edges graph.getEdges()…

京东广告算法架构体系建设--大规模稀疏场景高性能训练方案演变

一、前言 京东广告训练框架随着广告算法业务发展的特点也在快速迭代升级,回顾近几年大致经历了两次大版本的方案架构演变。第一阶段,随着2016年Tensorflow训练框架的开源,业界开始基于Tensorflow开源框架训练更复杂的模型。模型对特征规模和…

jsp粉丝社区系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 粉丝社区系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

鸿蒙ArkUI实现开关switch组件

鸿蒙ArkUI官方提供的toggle组件实现了开关的样式,但在使用过程中还是非常的不方便。 DIY可视化对鸿蒙ArkUI实现开关switch组件扩展后满足基本的switch需求,支持绑定值、设置标题文本、整个背景样式等。 /*** 开关*/ Component export default struct Di…

conda虚拟环境基础

【一文搞定最新版Anaconda】Win11 安装 Anaconda(2023.9)详解(不删除旧版情况下下载、安装、注册、登录、设置环境变量、迁移旧环境、配置修改换源等)连接Pycharm_win11安装anaconda-CSDN博客 conda命令大全(create/in…