当前位置: 首页 > article >正文

P2-CIFAR彩色图片识别

● 本文为365天深度学习训练营中的学习记录博客● 原作者K同学啊学习目标1.编写一个完整的深度学习程序2. 手动推导卷积层与池化层的计算过程一、前期准备1.设置GPUimport torch import torch.nn as nn import matplotlib.pyplot as plt import torchvision device torch.device(cuda if torch.cuda.is_available() else cpu) device2.导入数据使用dataset下载CIFAR10数据并划分训练集和测试集train_ds torchvision.datasets.CIFAR10(data, train True, transform torchvision.transforms.ToTensor(), download True) test_ds torchvision.datasets.CIFAR10(data, train False, transform torchvision.transforms.ToTensor(), download True)使用DataLoader加载数据并取出一批查看其输出格式batch_size 32 train_dl torch.utils.data.DataLoader(train_ds, batch_size batch_size, shuffle True) #打乱 test_dl torch.utils.data.DataLoader(test_ds, batch_size batch_size) imgs,labels next(iter(train_dl)) #取出一批的图像和对应标签 imgs.shape #输出格式[batch_size,channel,height,width]3.数据可视化transpose((1,2,0))把轴的顺序由[C,H,W]变为[H,W,C]更便于数据处理import numpy as np # 指定图片大小图像大小为20宽、5高的绘图(单位为英寸inch) plt.figure(figsize(20, 5)) for i, imgs in enumerate(imgs[:20]): # 进行轴变换 npimg imgs.numpy().transpose((1, 2, 0)) # 将整个figure分成2行10列绘制第i1个子图。 plt.subplot(2, 10, i1) plt.imshow(npimg, cmapplt.cm.binary) plt.axis(off) plt.show()二、构建CNN网络1.相关函数详解torch.nn.Cov2d()torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue, padding_modezeros, deviceNone, dtypeNone)in_channels(int)输入图像的通道数out_channels(int)卷积产生的通道数kernel_size(int / tuple)卷积核的大小stride(int / tuple)卷积的步幅默认为1padding(int / tuple / str)添加到输入的所有四个边的填充默认为0dilation(int / tuple)扩张操作卷积核点的距离默认为1groups(int)将输入通道分组成多个子组每个子组使用一组卷积核来处理。默认值为1表示不进行分组卷积。padding(str)zeros, reflect, replicate或circular. 默认zerostorch.nn.Linear()torch.nn.Linear(in_features, out_features, biasTrue, deviceNone, dtypeNone)in_features每个输入样本的大小out_features每个输出样本的大小torch.nn.MaxPool2d()torch.nn.MaxPool2d(kernel_size, strideNone, padding0, dilation1, return_indicesFalse, ceil_modeFalse)kernel_size最大的窗口大小stride窗口的步幅默认值为kernel_sizepadding填充值默认为0dilation控制窗口中元素步幅的参数2.构建模型import torch.nn.functional as F num_class 10 class Model(nn.Module): def __init__(self): super().__init__() #特征提取网络 self.conv1 nn.Conv2d(3,64,kernel_size3) self.pool1 nn.MaxPool2d(kernel_size2) self.conv2 nn.Conv2d(64,64,kernel_size3) self.pool2 nn.MaxPool2d(kernel_size2) self.conv3 nn.Conv2d(64,128,kernel_size3) self.pool3 nn.MaxPool2d(kernel_size2) #分类网络 self.fc1 nn.Linear(512,256) self.fc2 nn.Linear(256,num_class) def forward(self,x): x self.pool1(F.relu(self.conv1(x))) x self.pool2(F.relu(self.conv2(x))) x self.pool3(F.relu(self.conv3(x))) x torch.flatten(x,start_dim1) x F.relu(self.fc1(x)) x self.fc2(x) return x加载并打印模型from torchinfo import summary model Model().to(device) summary(model)3.卷积层和池化层的计算上图为池化层的计算公式下图为我的推导过程三、训练模型1.设置超参数loss_fn nn.CrossEntropyLoss() #损失函数 learn_rate 1e-2 #学习率 opt torch.optim.SGD(model.parameters(),lr learn_rate)2.编写训练函数optimizer.zero_grad()清空模型的梯度缓存loss.backward()反向传播自动计算每个参数的梯度optimizer.step()根据当前计算的梯度更新模型的参数def train(dataloader,model,loss_fn,optimizer): size len(dataloader.dataset) num_batches len(dataloader) train_loss,train_acc 0,0 for X,y in dataloader: X,y X.to(device),y.to(device) pred model(X) loss loss_fn(pred,y) optimizer.zero_grad() loss.backward() optimizer.step() train_acc (pred.argmax(1) y).type(torch.float).sum().item() train_loss loss.item() train_acc / size train_loss / num_batches return train_acc,train_loss3.编写测试函数def test(dataloader,model,loss_fn): size len(dataloader.dataset) num_batches len(dataloader) test_loss,test_acc 0,0 with torch.no_grad(): for imgs,target in dataloader: imgs,target imgs.to(device),target.to(device) target_pred model(imgs) loss loss_fn(target_pred,target) test_loss loss.item() test_acc (target_pred.argmax(1) target).type(torch.float).sum().item() test_acc / size test_loss / num_batches return test_acc,test_loss4.正式训练model.train()开始训练model.eval()开始评估epochs 10 train_loss [] train_acc [] test_loss [] test_acc [] for epoch in range(epochs): model.train() epoch_train_acc,epoch_train_loss train(train_dl,model,loss_fn,opt) model.eval() epoch_test_acc,epoch_test_loss test(test_dl,model,loss_fn) train_acc.append(epoch_train_acc) train_loss.append(epoch_train_loss) test_acc.append(epoch_test_acc) test_loss.append(epoch_test_loss) template (Epoch:{:2d}, Train_acc:{:.1f}%, Train_loss:{:.3f}, Test_acc:{:.1f}%Test_loss:{:.3f}) print(template.format(epoch1, epoch_train_acc*100, epoch_train_loss, epoch_test_acc*100, epoch_test_loss)) print(Done)四、结果可视化import matplotlib.pyplot as plt #隐藏警告 import warnings warnings.filterwarnings(ignore) #忽略警告信息 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号 plt.rcParams[figure.dpi] 100 #分辨率 from datetime import datetime current_time datetime.now() # 获取当前时间 epochs_range range(epochs) plt.figure(figsize(12, 3)) plt.subplot(1, 2, 1) plt.plot(epochs_range, train_acc, labelTraining Accuracy) plt.plot(epochs_range, test_acc, labelTest Accuracy) plt.legend(loclower right) plt.title(Training and Validation Accuracy) plt.xlabel(current_time) plt.subplot(1, 2, 2) plt.plot(epochs_range, train_loss, labelTraining Loss) plt.plot(epochs_range, test_loss, labelTest Loss) plt.legend(locupper right) plt.title(Training and Validation Loss) plt.show()五、个人总结这周进一步学习了CNN网络了解了卷积层、池化层、全连接层的函数并学习了卷积层和池化层的计算。与P1周使用的MINIST灰色图像不同本周使用的数据集是CIFAR10是彩色图像在可视化时需要使用transpose()进行轴变换这里建立的CNN网络是输入层-卷积层1-池化层1-卷积层2-池化层2-卷积层3-池化层3-flatten层-全连接层-输出层比P1建立的CNN网络复杂一些并且进行了10次训练但最终准确率远低于手写数字识别也可以看出彩色图像是更加难以识别的。

相关文章:

P2-CIFAR彩色图片识别

● 🍨 本文为🔗365天深度学习训练营中的学习记录博客 ● 🍖 原作者:K同学啊学习目标:1.编写一个完整的深度学习程序 2. 手动推导卷积层与池化层的计算过程一、前期准备1.设置GPUimport torch import torch.nn as nn im…...

CANN 算子融合技术:Conv-BN-ReLU 与 MatMul-LayerNorm 等融合模式深度解析

CANN 算子融合技术:Conv-BN-ReLU 与 MatMul-LayerNorm 等融合模式深度解析算子融合是提升性能的关键手段。本文深入讲解昇腾支持的算子融合技术、实现原理和应用实践。一、融合技术概述 1.1 为什么要融合 原始: Conv → BN → ReLU → Conv → BN → ReLU融合前内存…...

Gitea库完整从Ubuntu迁移到CentOS中

文章目录 一、概述 二、数据迁移 2.1 获取数据存储路径 2.2 搞事之前先备份(目标服务器CentOS) 2.2.1 停止gitea服务 2.2.2 备份gitea文件夹 2.3 从Ubuntu的数据目录中将数据拷贝到CentOS中 2.4 备份mysql数据库并拷贝到目标服务器(CentOS) 2.4.1 通过mysqldump备份数据库 …...

复杂干扰下考虑异质性的非机动车微观行为建模与仿真【附仿真】

✨ 长期致力于非机动车微观交通行为、异质性、感知—决策—行动三阶段、社会力模型、模糊逻辑研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)非机动车…...

(二) 1. Q-learning的遗憾界分析-高效的Q-learning算法

高效的Q-learning算法 1.1. 无模型算法 1.2. UCB算法 1.3. 文献回顾 无模型(Model-free)强化学习算法(如 Q-learning)无需显式地对环境进行建模,而是直接对价值函数或策略进行参数化和更新。与基于模型(Model-based)的方法相比,这类算法通常更简单、更灵活,因此在现代…...

企业微信外部群如何通过 API 自动化投递结构化小程序卡片

能力介绍 相比于传统的文字链接,结构化的小程序卡片拥有更高的点击率和更规范的视觉展现。该能力允许开发者通过主动调用 API,直接向指定的企业微信外部群投递原生小程序卡片。接口支持自定义动态配置小程序的 appid、首屏页面路径 pagepath&#xff08…...

obsidian博客联动方案

平台文章具有滞后性,最新文章请访问https://blog.nuoyis.net 原先博客需要使用typorapicgotypecho,其中typora编写完毕后需要复制到typecho后台去,极其不方便,然后经过高人指点,我对该软件交互使用开发了新高度 obsidi…...

【考研】2026/5/21

政治2026/5/21唯物辩证法本质上是批判的和革命的:在唯物辩证法看来,一切事物都处在发生、发展和灭亡的过程中,“不存在任何最终的东西、绝对的东西、神圣的东西”。唯物辩证法是客观辩证法与主观辩证法的统一:①客观辩证法&#x…...

1987年4月26日下午15-17点出生性格、运势和命运

1987年4月24日晚上出生的人,如今已步入38岁的门槛。在职业生涯中,这是一个承上启下的关键阶段——既脱离了职场新人的青涩,又尚未到达管理者或专家的巅峰位置。从非命理的角度分析,他们的事业运势与时代变迁、个人选择和社会结构密…...

企业AI合规:数据安全生死线

企业大模型应用中的数据安全合规体系建设 前言:数据安全合规——企业AI落地的必答题 一、合规风险识别与关键挑战 二、技术架构设计与安全合规方案 针对上述四大风险挑战,企业需要从技术架构层面构建纵深防御体系。以下从数据脱敏、访问控制、日志审计、…...

RAG三大冲突与三大死穴及解决方案

RAG :向量召回 稀疏匹配 重排序融合 动态裁剪 —— 冲突根源与工程解法 面向开发者的深度技术解析:揭开 RAG 检索 pipeline 中三个环节的底层冲突,以及幻觉漂移、上下文溢出、检索冗余三大企业级死穴的根治方案。 GitHub 项目地址&#xf…...

《数据挖掘(主编:吕欣 王梦宁)》读书笔记:异常检测方法梳理与实践理解

《数据挖掘(主编:吕欣 王梦宁)》读书笔记:异常检测方法梳理与实践理解本文是学习《数据挖掘(主编:吕欣 王梦宁)》中“异常检测”相关内容后的整理笔记。文章不追求逐条复述教材,而是…...

CANN-ATB多卡推理-昇腾NPU上Llama70B怎么切到8张卡

CANN-ATB多卡推理-昇腾NPU上Llama70B怎么切到8张卡 Llama2-70B 的权重 140GB,单张 Atlas 800I A2 的 64GB 显存放不下。ATB 的多卡推理用 Tensor Parallel 把模型切到多张 NPU 上,每张卡只存 1/N 的权重和 KV Cache。 Tensor Parallel 的切法 Llama2-70B…...

CANN 端侧部署实战:模型转换与服务化

CANN 端侧部署实战:模型转换与服务化如何将训练好的模型快速部署到昇腾端侧设备?本文详解模型格式转换、端侧优化与服务化部署的完整流程。—一、端侧部署概述 1.1 端侧部署的挑战 与数据中心训练不同,端侧部署面临独特的约束:算力…...

写给前端的 CANN-acl:昇腾应用开发接口到底是啥?

写给前端的 CANN-acl:昇腾应用开发接口到底是啥? 之前有兄弟问我:“哥,我想直接调用昇腾的底层API,不用 PyTorch 这些框架,怎么搞?” 好问题。今天一次说清楚。 acl 是啥? acl Asce…...

1987年5月10日晚上23-24点出生性格、运势和命运

出生在下午13-15点这一时段,从心理发展角度来看,最大的性格红利是“社交直觉”。这类人往往在很小的时候就展现出一种能力:能快速识别他人的情绪,并自然地调整自己的行为以促进和谐。这并非玄学,而是因为下午出生婴儿的…...

使用Coze制作一个可以“动”的存钱罐,比记账APP更易用

可视化、AI驱动、自动提醒才是你智能存钱的伙伴──────────────────────────────为什么你的存钱计划总是失败?大多数人的存钱失败,并不是由于缺乏决心,而是缺少反馈。存多少钱、目标达成的比例、离目标还有多远…...

1987年6月14日下午13-15点出生性格、运势和命运

这篇文章讨论终极命题:出生时间只是一个随机数据点,真正的命运由你自己书写。我们将探讨如何利用“1987年5月27日中午11-13点”这个符号,作为自我激励的起点,而非束缚。第一步:解构“出生时间”的神秘性 请明确&#x…...

XRF导向的土壤重金属定量分析方法与应用【附模型】

✨ 长期致力于X射线荧光、土壤重金属、本底扣除、重叠峰解析、光谱联用研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)非对称加权惩罚最小二乘本底扣…...

软件架构分析方法SAAM、ATAM与CBAM

一、SAAM(软件架构分析方法) 1. 核心思路 基于场景,评估架构对可修改性(以及可移植性、可扩充性)的支持程度。 关键是区分 直接场景(现有架构直接支持)和 间接场景(需要修改架构)。 通过分析间接场景的数量与修改代价,定位高风险、高耦合的模块。 2. 典型案例:内…...

SQL出现filesort 一定慢吗

前言:filesort 出现在当无法使用索引排序时,MySQL 必须自己计算排序顺序,这个过程称为 filesort。EXPLAIN 的 Extra 字段会出现 Using filesort。常见触发场景:排序列不在索引中,或顺序/方向与索引不一致ORDER BY 包含…...

Rust技术周刊 2026年第16周

阅读原文: https://mp.weixin.qq.com/s/9en-gxsNB544aG6hgkwJVQ 本周 Rust 生态亮点:GPU 计算突破(KAIO 达 cuBLAS 92.5%、flodl 多 GPU 训练),Tokio 异步优化实战频出,扩展标准库路线图发布,Rust 进入 Pix…...

FinalBurn Neo:一场跨越时空的街机游戏考古之旅

FinalBurn Neo:一场跨越时空的街机游戏考古之旅 【免费下载链接】FBNeo FinalBurn Neo - We are Team FBNeo. 项目地址: https://gitcode.com/gh_mirrors/fb/FBNeo 在数字时代的洪流中,有一群守护者正在用代码为经典街机游戏搭建永生的方舟。Fina…...

大模型的“文字障眼法“:FlipAttack 文本反转越狱技术全解析

一、先打个比方:你听说过"倒着说话"绕过安检吗? 想象一下,有个调皮的小孩想带进游乐园一个违禁品。安检人员耳朵很尖,一听到"炸弹""刀具"这些词就会拦人。于是小孩想了个办法——把话说反。 “我要…...

课堂教学PPT模板平台深度测评与选用指南

一、引言:PPT—— 课堂教学的重要辅助工具在当今的课堂教学中,PPT 已经成为了教师们不可或缺的 “魔法道具”。一份精心设计的 PPT,就像一位无声的助教,能够将抽象的知识变得直观形象,将枯燥的内容变得生动有趣。它不仅…...

帕鲁杯第二届应急响应:jumpserver,waf,mysql,sshserver,server01,Palu03,Palu02,每个靶机的漏洞总结

一、题目描述1.提交堡垒机中留下的flag2.提交waf中隐藏的flag3.提交mysql中留下的flag4.提交攻击者的攻击IP5.提交攻击者的最早攻击时间6.提交web服务泄露的关键文件名7.提交泄露的邮箱地址作为flag进行提交8.提交立足点服务器ip地址9.提交攻击者使用的提权用户密码10.提交攻击…...

意法半导体STM32F407VET6现货

在当今快速发展的电子技术领域,选择一款合适的微控制器对于项目成功至关重要。意法半导体(STMicroelectronics)推出的STM32F407VET6凭借其卓越性能、丰富的外设接口及广泛的应用场景,成为了众多开发者和工程师的首选。本文将深入探…...

写给前端的 CAAN-pyasc:昇腾Python Ascend C绑定到底是啥?

写给前端的 CAAN-pyasc:昇腾Python Ascend C绑定到底是啥? 之前有兄弟问我:“哥,我想在 Python 里直接写 Ascend C 算子,不想写 C,咋搞?” 好问题。今天一次说清楚。 pyasc 是啥? py…...

我的日常开发工具迭代|MonkeyCode实测存档

做开发日常,其实大部分编码需求都很琐碎,根本用不上繁杂的专业工具。但市面上的AI编程软件,要么收费贵、额度抠搜,要么功能臃肿、操作繁琐,用起来处处受限。我一直在找一款适配个人日常使用、不折腾、无套路的轻量化编…...

HTTPS一文通

https 的出现,为解决网络加密通信提供了完美的解决方案。现在得到了非常普遍的运用。但 https 的原理和部署方式还存在一些较迷惑的点。 一、基础数学知识 在普通的http通讯过程中,前端浏览器和服务器之间传递的都是明文,这样敏感信息就容易被…...