【深度学习】实验3答案:PyTorch实战——CIFAR图像分类

news2025/3/1 23:18:40

DL_class

学堂在线《深度学习》实验课代码+报告(其中实验1和实验6有配套PPT),授课老师为胡晓林老师。课程链接:https://www.xuetangx.com/training/DP080910033751/619488?channel=i.area.manual_search。

持续更新中。
所有代码为作者所写,并非最后的“标准答案”,只有实验6被扣了1分,其余皆是满分。仓库链接:https://github.com/W-caner/DL_classs。 此外,欢迎关注我的CSDN:https://blog.csdn.net/Can__er?type=blog。
部分数据集由于过大无法上传,我会在博客中给出下载链接。如果对代码有疑问,有更好的思路等,也非常欢迎在评论区与我交流~

实验3:PyTorch实战——CIFAR图像分类

多层感知机(MLP)

详细介绍所使用的模型及其结果,至少包括超参数选取,损失函数、准确率及其曲线;

  • 模型构成:MLP由简单的【线性变化+激活函数+损失函数】构成。根据实验二,此处选取relu作为激活函数,CrossEntropyLoss作为损失函数。
  • 隐含层结点:根据以下经验性指导将隐含层结点数量控制于 [ log3072,50000/2*(3072)][log50,50000/2*(50)]两个区间左右,此处大致为300和100。

请添加图片描述

  • 准确率曲线:见下文对比图,准确率不高,训练集达到60%左右,测试集达52%。

卷积网络(CNN)

详细介绍所使用的模型及其结果,至少包括超参数选取,损失函数、准确率及其曲线;

从上面的MLP演变过来,将线性连接层变成卷积层,激活函数变成最大池化,最后添加两个全连接层(线性+relu),仿照经典图像识别网络Letnet-5进行搭建,网络结构如下图所示。
img

定义网络并训练即可:

class CNNNet(nn.Module):
    def __init__(self):
        super(CNNNet, self).__init__()
        self.conv1 = torch.nn.Conv2d(in_channels=3,
                                     out_channels=16,
                                     kernel_size=5,
                                     stride=1,
                                     padding=0)
        self.pool = torch.nn.MaxPool2d(kernel_size=2,
                                       stride=2)
        self.conv2 = torch.nn.Conv2d(16, 32, 5)
        self.fc1 = torch.nn.Linear(32*5*5, 120)
        self.fc2 = torch.nn.Linear(120, 84)
        self.fc3 = torch.nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        # 卷积结束后将多层图片平铺batchsize行16*5*5列,每行为一个sample,16*5*5个特征
        x = x.view(-1, 32*5*5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

模型对比

比较不同模型配置下的结果,至少从三个方面作比较和分析,例如层数、卷积核数目、激活函数类型、损失函数类型、优化器等。

  • MLP和卷积:使用MLP和使用Letnet-5原始参数两个网络,训练8个周期,对比如下。卷积网络在准确率和收敛速度上都有着较好表现,最终测试集上准确率达到66.38%。
    请添加图片描述

  • 卷积核:将上述网络的卷积核分别改为3和7,进行更细致特征的提取尝试。其中,以3为例,经过两层卷积后的图片大小分别为32-3+1=3030/2=1515-4+1=1212/2=6。结论为,卷积核小而深的网络要比大而浅的网络有着更好表现。
    请添加图片描述

  • 优化器:此处尝试3种优化器,一种是普通的SGD,一种是加入动量(0.9)的SGD,最后一种结合了动量和RMSProp的Adam算法,可以自动调整学习率以抑制震荡。实验结果如下图所示。可以发现,动量的引入大幅度提高了收敛速率,而过大的学习率将会导致后期不断震荡,选取0.01或更小的学习率,或使用Adam算法为较好的选择。
    请添加图片描述

  • 损失函数:因为是多分类问题,且标签之间不存在距离问题,所以此处使用交叉熵损失,不再尝试其它。

  • 激活函数:分别使用relu,rrelu(负梯度也可以传播),sigmoid和tanh四种激活函数。sigmoid在多层深度网络中表现较差,出现明显断层(20%准确率),不再分析。rrelu和tanh有着不相上下的表现。
    请添加图片描述

  • 层数:根据实验二可以知道,有两个隐含层的网络结构无论在准确率和收敛性上都明显优于单层网络。同时,随着层数的增加,能够提取到的特征就越明晰,网络的表达能力也会提高,见下图为增加了一层卷积后的效果,最终训练集上准确率可以达到88%,测试集上可以达到72%。此外,随着网络层数的增加,伴随梯度消失的问题,可以搭建ResNet-18残差网络,进行尝试训练。本机算力较差,没有跑出结果过来。
    请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python采集天气数据,做可视化分析【附源码】

知识点: 动态数据抓包requests发送请求结构化非结构化数据解析 开发环境: python 3.8 运行代码pycharm 2021.2 辅助敲代码requests 如果安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests)回车在pycharm中点击Term…

RocketMQ 5.0 API 与 SDK 的演进

作者: 艾阳坤 RocketMQ 5.0 SDK 采用了全新的 API,使用 gRPC 作为通信层的实现,并在可观测性上做了很大幅度的提升。 全新统一的 API 此处的 API 并不单单只是接口上的定义,同时也规定了各个接口不同的方法和行为,明…

【案例实战】分布式应用下登录检验解决方案(JWT)

文章目录1.需求背景以及JWT简介2.创建Maven项目,搭建SpringBoot项目3.容器化急速部署MySQL4.数据库表准备5.SpringBoot整合MySQLMyBatisPlus6.MyBatisPlus逆向工程自动生成7.SpringBoot整合JWT8.开发测试接口9.开发登录接口10.开发登录拦截器11.启动验证1.需求背景以…

cookie介绍:cookie实现增删改查功能

1、cookie介绍 只能存储文本,只能实现在本地的存储;单条存储有大小限制4kB左右,数量限制(一般浏览器,限制大概在50条左右);读取有域名限制:不可跨域读取,只能由来自写入…

集成学习与随机森林

1、集成学习概念 集成学习(ensemble learning)是一类机器学习框架,通过构建并结合多个学习器来完成学习任务。一般结构是:先产生一组“个体学习器”,再用某种策略将它们结合起来。结合策略主要有平均法、投票法和学习法等 集成学习包含三个…

仿大众点评——秒杀系统部分01

秒杀系统 全局ID生成器 全局唯一ID生成策略: UUIDRedis自增snowflake算法数据库自增 这里使用Redis自增的数值,并拼接一些其它信息 Redis自增ID策略: 每天一个key,方便统计订单量ID构造是 时间戳 计数器 ID的组成部分&#…

Unity接入日志插件Log4Net

前言 log4net是一个日志插件,可以帮助我们把控制台输出的日志写入到本地。这个功能说简单就简单,说复杂其实还挺复杂。 为什么这么说呢,首先文件写入本地确实简单,但是如果你要实现一下功能就没那么简单了。 1.把每行日志按照指…

2022年“新一代”设备管理系统——支持低代码平台

在现代化企业的信息化管理体系建设中,设备管理系统被看作是重中之重。因为设备是工厂的主要生产要素,而且随着生产设备的日益增多,设备的重要性日益凸显。如何妥善管理这些设备也成了企业管理者经常考虑的问题。单纯依靠人工管理逐渐不能满足…

uniapp实现下拉刷新及上拉(分页)加载更多(app,H5,小程序均可使用)

开门见山地说,在移动端开发中,80%的项目都会涉及到列表展示,而有了列表不可避免的需求就是列表的下拉刷新和上拉加载更多。本篇文章主要介绍在使用uniapp开发移动端的过程中,比较好用的一个下拉及上拉组件,节约大家选择…

5.2启动内存分页机制,畅游虚拟空间

5.2启动内存分页机制,畅游虚拟空间 即使机器上只有512MB的内存,每个进程自己的内存空间也是4GB,这4GB便是指的虚拟内存空间。下面就是讲解虚拟内存空间是怎么来的。 5.2.1内存为什么要分页 问题场景:由于多进程的发展&#xff…

软考 - 计算机组成与结构

数据计算 数据的进制转化 十六进制符号 0X 或 H,可表示为0x18F 或 18FH m进制转n进制:先将m进制转化为十进制数,再将十进制数转化为n进制数(2进制可直接转8进制(3位)和16进制(4位&#xff09…

Python如何自动操作电脑桌面应用程序

前言 本文是该专栏的第2篇,后面会持续分享python的各种黑科技知识,值得关注。 熟悉python的朋友,都知道python可以做自动化,比如说selenium,pyppeteer,airtest等等。 但你是否听说过python可以来自动操作电脑桌面的应用程序呢,趟若临时接到某个需求,让你用python脚本…

基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持

目录1.设计架构2.工程简介3.zynq配置4.sd卡文件系统FATFS配置5.sd卡文件系统FATFS读写测试6.OV5640摄像头显示测试7.OV5640摄像头循环拍照测试8.OV5640摄像头按键拍照测试9.上板调试10.福利领取1.设计架构 设计框图如下: 采用Xilinx官方推荐的VDMA架构实现图像缓存…

TiDB丨一次TiDB GC阻塞引发的“惨案”......

前不久,从项目一线同学得到某集群的告警信息,某个时间段 TiDB duration 突然异常升高,持续时间6小时左右,需要定位到具体原因。 于是乎,我们就来一场关于TiDB GC阻塞的排查...... 分析过程 第一招 初步判断 既然…

Docker+nginx在CVM的机器远程发布hellogin

有两种方式,一种通过docker容器安装,一种是直接安装, 这里我们通过docker服务安装 常用操作 images是查询当前机器上所有的镜像有哪些 docker images删除镜像 docker rmi [MAGE ID ]可以查当前运行中的容器 docker ps -a开始/停止/删除容器 docker…

动态树的最值

一 问题描述 一棵树有 N 个节点,每个节点都有一个权值 Wi ,有 4 种操作。 ① 1 x y ,在两个节点 x、y 之间添加一条新边。因此,在这种操作之后,两棵树将连接成一棵新树。 ② 2 x y ,在树集合中找到包含节…

LeetCOde-剑指46-把数字翻译成字符串

1、动态规划法 我们通过观察可以发现,假如我们使用数组dp[i]dp[i]dp[i]来记录前iii位可能构成的字符串个数:1、当新加入的第i1i1i1位和第iii位能够构成一个大于9小于26的数字时,dp[i1]dp[i]dp[i−1]dp[i1]dp[i]dp[i-1]dp[i1]dp[i]dp[i−1]&a…

容器化部署(k8s)任务调度平台xxl-job(部署过程及踩坑问题记录)

文章预览:1 部署过程(下方ip代表服务器的ip哈)1.1 制作服务打包镜像DockerFile1.2 制作执行脚本run.sh1.3 jar包上上传1.4 kuboard创建----配置信息2 踩坑问题记录2.1 日志抛出异常2.2 原因分析2.3 过程分析及解决2.4 执行调度测试导入sql等过…

Baklib|SaaS产品,实现企业流程数字化

正如许多科技潮流一样,“SaaS”这个词也逐渐成为企业经理们谈论的话题。然而,如果您对“SaaS”一无所知,您可能会感到困惑并容易忽略它。那么,什么是“SaaS”?它的优点是什么?它如何帮助企业实现数字化转型…

SSM+VUE+ElementUI实现宠物领养系统,期末大作业

SSMVUEElementUI实现宠物领养系统 系统角色 领养人,管理员 系统功能 本系统的功能主要分为四大模块: 领养人用户模块:注册、领养人登录、申请领养、查看小动物信息、发布留言领养机构员工用户模块:领养机构员工登录、增加小动…