项目实例_FashionMNIST_CNN
前言
提醒:
文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。
其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。
文章目录
- 前言
- CNN介绍
- 数据集介绍
- FashionMNIST 数据集概述
- 主要特点:
- 类别标签:
- 目标:
- 为什么使用 FashionMNIST:
- 图像示例:
- 数据加载与预处理:
- 下载和加载 FashionMNIST(PyTorch 代码示例):
- 数据集使用场景:
- 数据集可视化
- 总结:
- 项目实例
- 代码
CNN介绍
可见于:
MNIST数据集_CNN
数据集介绍
FashionMNIST 数据集概述
FashionMNIST 是一个包含 10 个类别的图像数据集,用于训练和测试机器学习模型,特别是在图像分类任务中的应用。它是由 Zalando 提供的,目的是为了给机器学习社区提供一个标准化、简洁但具有挑战性的视觉分类数据集。FashionMNIST 是 MNIST 数据集的一个变种,后者包含手写数字图像。
主要特点:
- 图像大小:每张图像的分辨率为 28x28 像素,每个像素为灰度值(单通道,值在 0 到 255 之间)。
- 图像类型:这些图像展示了 10 种不同类型的时尚商品,例如鞋子、T 恤、外套等。
- 数据集结构:
- 训练集:60,000 张图像
- 测试集:10,000 张图像
- 类别:数据集包含 10 个类别,分别对应不同的服装商品(每个类别有对应的标签)。
类别标签:
- 0: T 恤/上衣
- 1: 裤子
- 2: 套头衫
- 3: 连衣裙
- 4: 外套
- 5: 凉鞋
- 6: 衬衫
- 7: 运动鞋
- 8: 包
- 9: 靴子
目标:
FashionMNIST 的目标是对每张 28x28 的灰度图像进行分类,判定该图像属于哪个类别(例如是 “T 恤”、“裤子” 还是 “运动鞋” 等)。因此,它是一个 多类分类 问题,通常被用来评估各种机器学习模型,尤其是在图像分类任务中的表现。
为什么使用 FashionMNIST:
FashionMNIST 与原始的 MNIST 数据集相似,但相比 MNIST(手写数字),FashionMNIST 的图像内容更加复杂且多样。这使得它在很多机器学习和深度学习领域成为了一个较为简单但富有挑战性的测试集。它被广泛应用于:
- 深度学习模型的评估:特别是用于测试卷积神经网络(CNN)等模型的性能。
- 学习和研究:它提供了一个简单且标准化的图像分类数据集,适用于机器学习入门或新模型的验证。
图像示例:
每张图像都是 28x28 像素的灰度图,显示的是一件衣物的图片。图像尺寸较小,适合在初学者的机器学习项目中进行训练,因为它不需要大量的计算资源。
数据加载与预处理:
FashionMNIST 数据集一般会在加载时进行一些标准的预处理步骤,如:
- 归一化:将像素值从
[0, 255]
范围映射到[0, 1]
范围,或者进行标准化,常常帮助提升模型的收敛速度。 - 转换:通常使用
transforms.ToTensor()
将图像转换为 PyTorch 中的 Tensor 格式。
下载和加载 FashionMNIST(PyTorch 代码示例):
import torchvision
from torchvision import transforms# 加载训练集数据
train_data = torchvision.datasets.FashionMNIST(root='data', # 存储路径train=True, # 训练集download=True, # 下载数据集transform=transforms.ToTensor(), # 转换为 Tensor 格式
)# 加载测试集数据
test_data = torchvision.datasets.FashionMNIST(root='data',train=False, # 测试集download=True,transform=transforms.ToTensor(),
)
这段代码使用 torchvision.datasets.FashionMNIST
来下载并加载训练和测试数据集,图像会被转换为 PyTorch 的 Tensor 格式。
数据集使用场景:
- 入门项目:对于初学者,FashionMNIST 是一个非常适合入门的图像分类数据集,因为它相对简单,且具有一定的挑战性。
- 模型对比与验证:在机器学习和深度学习领域,FashionMNIST 常常作为测试模型性能的标准数据集之一,用来对比不同算法(如支持向量机、KNN、神经网络等)的表现。
- 神经网络训练:尤其是卷积神经网络(CNN)在图像分类任务中的应用,FashionMNIST 为其提供了一个理想的训练平台。
数据集可视化
import torch
from torchvision import datasets, transforms
import matplotlib.pyplot as plt
import numpy as np# 下载 FashionMNIST 数据集
transform = transforms.Compose([transforms.ToTensor()]) # 只需要转换为 Tensor
train_data = datasets.FashionMNIST(root='data', train=True, download=True, transform=transform)# 获取前 10 张图像以及对应的标签
images, labels = zip(*[(train_data[i][0], train_data[i][1]) for i in range(10)])# 类别名称映射
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot'
]# 设置绘图
fig, axes = plt.subplots(1, 10, figsize=(15, 15)) # 创建 1 行 10 列的子图for i in range(10):ax = axes[i]ax.imshow(images[i].squeeze(), cmap='gray') # squeeze 去掉多余的维度,cmap 为灰度色ax.set_title(class_names[labels[i]]) # 标注类别名称ax.axis('off') # 不显示坐标轴plt.show() # 显示图像
运行结果:
总结:
FashionMNIST 是一个标准化的图像分类数据集,由 Zalando 提供。它由 10 类不同的时尚商品构成,训练集包含 60,000 张图像,测试集包含 10,000 张图像。它适用于深度学习、机器学习模型的训练和评估,尤其适合初学者学习和实验。
项目实例
代码
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt# 下载训练数据集FashionMNIST
training_data = torchvision.datasets.FashionMNIST(root="data", # 数据集存储位置train=True, # 使用训练集download=True, # 如果数据集不存在,则下载transform=transforms.ToTensor(), # 转换为Tensor
)# 下载测试数据集FashionMNIST
test_data = torchvision.datasets.FashionMNIST(root="data",train=False, # 使用测试集download=True,transform=transforms.ToTensor(), # 转换为Tensor
)# 标签的映射字典,数字标签对应的衣物类别名称
labels_map = {0: "T-Shirt",1: "Trouser",2: "Pullover",3: "Dress",4: "Coat",5: "Sandal",6: "Shirt",7: "Sneaker",8: "Bag",9: "Ankle Boot",
}# 可视化FashionMNIST数据集中前9张图片
figure = plt.figure(figsize=(8, 8)) # 创建一个8x8的图像画布
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") # 显示图像,squeeze去掉多余维度,cmap设置为灰度图
plt.show() # 展示图像# 设置训练过程中的超参数
num_epochs = 10 # 训练的轮数
batch_size = 32 # 批大小
weight_decay = 1e-4 # 权重衰减(L2正则化)
learning_rate = 0.001 # 学习率# 创建数据加载器,训练集和测试集
train_dataloader = torch.utils.data.DataLoader(training_data, batch_size=batch_size)
test_dataloader = torch.utils.data.DataLoader(test_data, batch_size=batch_size)# 打印测试集的一个batch的尺寸和标签类型
for X, y in test_dataloader:print(f"Shape of X [N, C, H, W]: {X.shape}") # X是输入图像,N是批大小,C是通道数,H和W是图像的高和宽print(f"Shape of y: {y.shape} {y.dtype}") # y是标签,显示其维度和数据类型break # 只打印一个batch的信息# 检测是否使用GPU进行训练
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using {device} device") # 输出当前使用的设备(CUDA or CPU)# 定义一个简单的神经网络模型
class NeuralNet(nn.Module):def __init__(self, input_size, hidden_size, num_classes):super(NeuralNet, self).__init__()self.fc1 = nn.Linear(input_size, hidden_size) # 第一层全连接层,输入784个特征,输出hidden_size个特征self.relu = nn.ReLU() # ReLU激活函数self.fc2 = nn.Linear(hidden_size, num_classes) # 第二层全连接层,输出num_classes个类别的预测值def forward(self, x):out = self.fc1(x) # 输入通过第一层out = self.relu(out) # ReLU激活out = self.fc2(out) # 输入通过第二层,输出结果return out# 假设输入是28x28的图像,展开为784维,隐藏层大小为500,分类数为10
model = NeuralNet(input_size=784, hidden_size=500, num_classes=10).to(device)# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss() # 使用交叉熵损失函数,适用于多分类问题
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate, weight_decay=weight_decay) # 使用Adam优化器# 开始训练模型
total_step = len(train_dataloader) # 获取训练集的总批次数
for epoch in range(num_epochs): # 遍历每一个epochfor i, (images, labels) in enumerate(train_dataloader): # 遍历每一个batchimages = images.reshape(-1, 28*28).to(device) # 将28x28的图像展开成784维向量,转移到device(GPU/CPU)labels = labels.to(device) # 标签转移到设备上# 前向传播outputs = model(images) # 将输入传入模型,得到预测输出loss = criterion(outputs, labels) # 计算损失# 反向传播和优化optimizer.zero_grad() # 清零之前的梯度loss.backward() # 计算当前梯度optimizer.step() # 更新模型参数# 每100个batch输出一次训练状态if (i + 1) % 100 == 0:print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{total_step}], Loss: {loss.item():.4f}')# 训练完成后,在测试集上评估模型的准确率
model.eval() # 设置模型为评估模式(此时BatchNorm等层使用移动平均值而不是批量值)
with torch.no_grad(): # 不需要计算梯度correct = 0total = 0for images, labels in test_dataloader:images = images.reshape(-1, 28*28).to(device) # 将图像展开为784维labels = labels.to(device) # 标签转移到设备上outputs = model(images) # 获取模型的输出_, predicted = torch.max(outputs.data, 1) # 获取预测类别,outputs.data返回模型的预测结果total += labels.size(0) # 统计总样本数correct += (predicted == labels).sum().item() # 统计预测正确的样本数# 输出模型在测试集上的准确率print(f'Test Accuracy of the model on the 10000 test images: {100 * correct / total} %')
相关文章:
项目实例_FashionMNIST_CNN
前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…...
Ubuntu 安装 web 服务器
安装 apach sudo apt install apache2 -y 查看 apach2 版本号 apache2 -v 检查是否启动服务器 sudo service apache2 status 检查可用的 ufw 防火墙应用程序配置 sudo ufw app list 关闭防火墙 sudo ufw disable 更改允许通过端口流量 sudo ufw allow Apache Full 开启…...
burp的编解码,日志,比较器
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
2.1、模版语法
2.1.1、插值语法 1、代码示例 <body><!-- 准备容器 --><div id"app"><!-- 在data中声明的 --><!--1、 data中声明的变量 --><h1>{{msg}}</h1><h1>{{sayHello()}}</h1><!-- 不在data中的变量不可以 -->…...
最小二乘法拟合出二阶响应面近似模型
背景:根据样本试验数据拟合出二阶响应面近似模型(正交二次型),并使用决定系数R和调整的决定系数R_adj来判断二阶响应面模型的拟合精度。 1、样本数据(来源:硕士论文《航空发动机用W形金属密封环密封性能分析…...
【汽车】-- 常见的汽车悬挂系统
汽车悬挂系统是车辆的重要组成部分,其主要功能是连接车轮和车身,减缓路面颠簸对车身的影响,提高行驶的平顺性、舒适性和操控性。以下是常见的汽车悬挂系统类型及其特点: 1. 独立悬挂系统 每个车轮可以独立上下运动,不…...
VMware Workstation Pro 17 下载 以及 安装 Ubuntu 20.04.6 Ubuntu 启用 root 登录
1、个人免费版本 VMware Workstation Pro 17 下载链接怎么找?直接咕咕 VMware 找到如下链接。链接如下:Workstation 和 Fusion 对个人使用完全免费,企业许可转向订阅 - VMware 中文博客 点进去链接之后你会看到如下,注意安装之后仍…...
记录ubuntu22.04重启以后无法获取IP地址的问题处理方案
现象描述:我的虚拟机网络设置为桥接模式,输入ifconfig只显示127.0.0.1,不能连上外网。,且无法上网,用ifconfig只有如下显示: 1、sudo -i切换为root用户 2、输入dhclient -v 再输入ifconfig就可以看到多了…...
linux 删除系统特殊的的用户帐号
禁止所有默认的被操作系统本身启动的且不需要的帐号,当你第一次装上系统时就应该做此检查,Linux提供了各种帐号,你可能不需要,如果你不需要这个帐号,就移走它,你有的帐号越多,就越容易受到攻击。 1.为删除你系统上的用户,用下面的…...
core Webapi jwt 认证
core cookie 验证 Web API Jwt 》》》》用户信息 namespace WebAPI001.Coms {public class Account{public string UserName { get; set; }public string UserPassword { get; set; }public string UserRole { get; set; }} }》》》获取jwt类 using Microsoft.AspNetCore.Mvc…...
【Redis】Redis基础——Redis的安装及启动
一、初识Redis 1. 认识NoSQL 数据结构:对于SQL来说,表是有结构的,如字段约束、字段存储大小等。 关联性:SQL 的关联性体现在两张表之间可以通过外键,将两张表的数据关联查询出完整的数据。 查询方式: 2.…...
Oracle Recovery Tools工具一键解决ORA-00376 ORA-01110故障(文件offline)---惜分飞
客户在win上面迁移数据文件,由于原库非归档,结果导致有两个文件scn不一致,无法打开库,结果他们选择offline文件,然后打开数据库 Wed Dec 04 14:06:04 2024 alter database open Errors in file d:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_6056.trc: ORA-01113:…...
常用环境部署(二十四)——Docker部署开源物联网平台Thingsboard
1、Docker和Docker-compose安装 参考网址如下: CENTOS8.0安装DOCKER&DOCKER-COMPOSE以及常见报错解决_centos8安装docker-compose-CSDN博客 2、 Thingsboard安装 (1)在/home目录下创建docker-compose.yml文件 vim /home/docker-com…...
SqlServer Doris Flink SQL 类型映射关系
SqlServer 对应 Flink SQL 数据类型映射关系 SQL Server TypeFlink SQL Typechar(n)CHAR(n)varchar(n)VARCHAR(n)nvarchar(n)VARCHAR(n)nchar(n)VARCHAR(n)textSTRINGntextSTRINGxmlSTRINGdecimal(p, s)DECIMAL(p, s)moneyDECIMAL(p, s)smallmoneyDECIMAL(p, s)numericNUMERIC…...
Java 中的方法重写
在 Java 中,方法重写(Method Overriding)是面向对象编程的一个重要概念,它指的是子类中存在一个与父类中相同名称、相同参数列表和相同返回类型的方法。方法重写使得子类可以提供特定的实现,从而覆盖(或改变…...
v-for遍历多个el-popover;el-popover通过visible控制显隐;点击其他隐藏el-popover
场景:el-popover通过visible控制显隐;同时el-popover是遍历生成的多个。 原文档的使用visible后就不能点击其他地方使其隐藏;同时解决实现点击其他区域隐藏 <template><div><template v-for="(item,index) in arr" :key="index"><…...
从 Excel 文件中读取数据生成 SQL 语句[快捷main方法]
从 Excel 文件中读取数据生成 SQL 语句的实现 在日常工作中,我们经常需要从 Excel 文件中提取数据,并将其转换为 SQL 插入语句,以便于将数据导入到数据库中。在这篇文章中,我将展示如何使用 Java 来实现这一需求。 项目需求 我…...
从0到1实现项目Docker编排部署
在深入讨论 Docker 编排之前,首先让我们了解一下 Docker 技术本身。Docker 是一个开源平台,旨在帮助开发者自动化应用程序的部署、扩展和管理。自 2013 年推出以来,Docker 迅速发展成为现代软件开发和运维领域不可或缺的重要工具。 Docker 采…...
Vue框架入门
Author:Dawn_T17?? 目录 什么是框架 一.Vue 的使用方向 二.Vue 框架的使用场景 (TIP)MVVM思想 三.Vue入门案例 TIP:插值表达式 四.Vue-指令? (1)v-bind 和 v-model? ? (2&#x…...
vue入门实战(二)父子组件显示,参数传递
经过上次的写法,我们已经写出每个list项,现在要在每个父组件下面加入自己的子项 一、新建子组件: smallItem.vue: <script> export default{props:[text,id,status] //父组件传来的参数 } </script> <template>…...
【Linux】Ubuntu:安装系统后配置
hostname:更改主机名 打开终端。 使用hostnamectl命令更改主机名。 sudo hostnamectl set-hostname 新的主机名你可以使用hostnamectl 命令来验证更改是否成功: hostnamectlChrome:更换默认浏览器 以下是从 Ubuntu 中移除预装的 Snap 版 Fi…...
springboot-查看版本和版本所需JDK
文章目录 访问spring管网查看springboot 项目查看当前版本查看版本所需JDK 访问spring管网 https://spring.io/ 查看springboot 项目 查看当前版本 点击调整到参考文档中去… 查看版本所需JDK...
fuxa搭建与使用(web组态)
1. 安装Node.js -> npm安装 参考网址:https://blog.csdn.net/WHF__/article/details/129362462 一、安装运行 C:WINDOWSsystem32>node -v v20.17.0 C:WINDOWSsystem32>npm -v 10.8.2 二、环境配置 在安装路径(D:Program_Files odejs&#x…...
中间件--MongoDB部署及初始化js脚本(docker部署,docker-entrypoint-initdb.d,数据迁移,自动化部署)
一、概述 MongoDB是一种常见的Nosql数据库(非关系型数据库),以文档(Document)的形式存储数据。是非关系型数据库中最像关系型数据库的一种。本篇主要介绍下部署和数据迁移。 在 MongoDB 官方镜像部署介绍中ÿ…...
C语言期末考试——常见考题(模拟考)
目录 一、填空题(每空2分,共 20 分) 二、选择题(每题2分,共26分) 三、编程题(第1题6分,其余题目每题10分) !!!需要答案的可以私信&…...
流量过滤与路径转发控制
1,策略路由 PBR基本概念: 策略路由,使网络设备不仅能够基于报文的目的IP地址进行数据转发,也能基于其他元素进行转发,比如源IP地址、MAC地址 可以使用ACL匹配特定的报文,针对该ACL进行PBR部署 PRB策略的…...
Ungoogled Chromium127编译指南 Windows篇 - 获取源码(七)
1. 引言 在完成所有必要工具的安装和配置后,我们进入了Ungoogled Chromium编译过程的第一个关键阶段:获取源代码。本文将详细介绍如何正确获取和准备Ungoogled Chromium的源代码,为后续的编译工作打下基础。 2. 准备工作 2.1 环境检查 在…...
k8s 之 StatefulSet
深入理解StatefulSet(一):拓扑状态 k8s有状态与无状态的区别 无状态服务:deployment Deployment被设计用来管理无状态服务的pod,每个pod完全一致.什么意思呢? 无状态服务内的多个Pod创建的顺序是没有顺序的. 无状态服务内的多…...
iPhone 17 Air基本确认,3个大动作
近段时间,果粉圈都在讨论一个尚未发布的新品:iPhone 17 Air,苹果又要来整新活了。 从供应链消息来看,iPhone 17 Air本质上是Plus的替代品,主要是在维持“大屏”这一卖点的同时,增加了“轻薄”属性ÿ…...
鸿蒙实现应用通知
目录: 1、应用通知的表现形式2、应用通知消息的实现1、发布普通文本类型通知2、发布进度类型通知3、更新通知4、移除通知 3、设置通知道通展示不同形式通知4、设置通知组5、为通知添加行为意图1、导入模块2、创建WantAgentInfo信息3、创建WantAgent对象4、构造Notif…...
随州网络推广/独立站seo搜索优化
今天,开学了!寒假后,学生们又回到校园开始新学期的学习。(资料图片)本报讯(记者 陈玉珍)在度过一个愉快短暂的寒假后,学生们又回到校园开始新学期的学习,今日,泉州市各中小学开学并正式上课。开学的第一天&…...
wordpress管理员/seo外包优化网站
数组循环数组循环方法:for循环,forEach(),for/in。一、for循环1.使用Object.keys()参数为对象,返回一个数组,为对象属性名的集合(不可枚举的除外)。IE8,然后使用for循环得到对象的值的集合。 var o{a:1,b:2,c:3}; Obje…...
wordpress 如何修改主题宽度/阐述网络营销策略的内容
解析:〈#ffffffff〉 #ffffffff由#加八位数字或字母组成,前两个ff为透明度(十六进制),后面六位ffffff为颜色代码,采用RGB配色(十六进制) 需要修改的机油一般都要查找相关资料…...
微信服务号菜单链接网站怎么做/银川网页设计公司
JQMYSQL实现省市区联动JQ部分 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 1、PHP代码 相关函数&…...
网站如何做团购/知乎关键词优化软件
概述 WeUI是一套同微信原生视觉体验一致的基础样式库,为微信Web开发量身设计,可以令用户的使用感知更加统一。包含button、cell、dialog、toast、article、icon等各式元素。 这有什么好处呢?其实从上面也可以看到官方的话,就是让…...
张家口做网站便宜点的/淘宝补流量平台
http://www.seowhy.com/ 转载于:https://www.cnblogs.com/releaseyou/archive/2009/05/12/1455175.html...