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

DenseNet完成Cifer10任务的效果验证

本文章是针对论文《2017-CVPR-DenseNet-Densely-Connected Convolutional Networks》中实验的复现,使用了几乎相同的超参数

目录

一、论文中的实验

1.准确率

2.参数效率

3.不同网络结构之间的比较

二、超参数:

三、复现的实验结果:

1.DenseNet201 epoch=40:

2.DenseNet121 epoch=40:

3.ResNet18 epoch=40:

三、结论

1.准确率

2.参数效率


一、论文中的实验

        在源论文中,作者使用CIFAR10,CIFAR100和SVHN三个数据集上使用了一些包括DenseNet-BC(以下统称DenseNet)和ReNet的网络进行测试,最终的错误率如下:

1.准确率

        在没有数据增强的情况下,DenseNet的准确率显著超过了其他网络,在有数据增强的情况下,也有微弱优势

2.参数效率

        在参数数量相等的情况下,DenseNet优更低的错误率,在达到相同错误率时,DenseNEt只用了1/3的参数

3.不同网络结构之间的比较

网络层数越多,错误率越低

二、超参数:

#使用镜像加裁剪的数据增强,以及使用通道均值和标准差对数据进行归一化
transform_train = transforms.Compose([transforms.RandomHorizontalFlip(),transforms.RandomCrop(32, padding=4),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
])#使用通道均值和标准差对数据进行归一化
transform_test = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
])
#载入训练集50000张图片,batchsize=64
trainset = tv.datasets.CIFAR10(root='./data', train=True,download=True, transform=transform_train)
trainloader = t.utils.data.DataLoader(trainset, batch_size=64,shuffle=True, num_workers=0)
#载入测试集10000张图片
testset = tv.datasets.CIFAR10(root='./data', train=False,                                 download=True, transform=transform_test)
testloader = t.utils.data.DataLoader(testset, batch_size=64,shuffle=False, num_workers=0)
#使用GPU训练
MyDevice = t.device("cuda:0" if t.cuda.is_available() else "cpu")
# 权重初始化(本论文中直接引用的另一篇论文的权重初始化,这里也是直接拿过来用)
def weights_init(m):classname = m.__class__.__name__if classname.find('Conv') != -1:nn.init.kaiming_normal_(m.weight)elif classname.find('BatchNorm') != -1:nn.init.constant_(m.weight, 1)nn.init.constant_(m.bias, 0)net.apply(weights_init)
net=net.to(MyDevice)
#交叉熵损失函数
criterion = nn.CrossEntropyLoss()
#使用SGD优化,初始学习率为0.1,使用权重衰减为0.0001和0.9的Nesterov动量
optimizer = optim.SGD(net.parameters(), lr=0.1, momentum=0.9, weight_decay=1e-4)
#在训练周期为总周期的50%和75%时,学习率降低10倍
scheduler = MultiStepLR(optimizer, milestones=[20,30], gamma=0.1)

三、复现的实验结果:

论文中给出了DenseNet的四中结构,我们首先分别使用121和201使用同样的超参数进行了测试:

1.DenseNet201 epoch=40:

#直接使用pytorch提供的网络
net = models.densenet121(pretrained=False,num_classes=10).to(MyDevice)

2.DenseNet121 epoch=40:

#直接使用pytorch提供的网络
net = models.densenet121(pretrained=False,num_classes=10).to(MyDevice)

对于ResNet,我们同样使用了最简单ResNet18和较复杂的ResNet101:

3.ResNet18 epoch=40:

net = models.resnet18(pretrained=False,num_classes=10).to(MyDevice)

三、结论

1.准确率

        复现的实验准确率与论文中的实验准确率存在差距,原因可能是仍有部分超参数不同,论文中有一些超参数时直接引用的其他论文,没有给出具体参数,比如“We adopt a standard data aug-mentation scheme (mirroring/shifting) that is widely used for these two datasets[1113172228203234]”,我们没有时间和能力去读额外的论文,所以采用了便于实现的镜像+裁剪来进行数据增强。在权重初始化和定义优化函数时也遇到了类似的问题,所以实验并不是100%复现

2.参数效率

DenseNet的参数效率确实比DenseNet,可以从运行时的程序内存占用大概看出来(PythonApplication9在运行ResNet18,PythonApplication8在运行DenseNet201)

相关文章:

  • MFC四种方法编写多线程
  • 从“数据孤岛”、Data Fabric(数据编织)谈逻辑数据平台
  • 基于百度地图WebGL版二次开发的数据可视化大屏(白天黑夜模式自动切换、标注聚合功能、历史路线轨迹查询)
  • Linux--MQTT(二)通信基本原理
  • 【Python】Python 2 测试网络连通性脚本
  • GenericObjectPool对象池化的介绍与用法
  • Linux在创建用户的时候遇到的错误:useradd: Permission denied.useradd:无法锁定 /etc/passwd,请稍后再试。
  • LeetCode | 434.字符串中的单词数
  • 数据结构之链表的经典笔试题
  • C++笔试强训day42
  • 【实例分享】访问后端服务超时,银河麒麟服务器操作系统分析及处理建议
  • 有趣的傅里叶变换与小波变换对比(Python)
  • Redis系列-4 Redis集群介绍
  • Linux基础指令(二)(文件、权限等)
  • CAN测试工具——BUSMASTER
  • 收藏网友的 源程序下载网
  • __proto__ 和 prototype的关系
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • android 一些 utils
  • HashMap ConcurrentHashMap
  • JavaScript设计模式之工厂模式
  • js对象的深浅拷贝
  • Linux Process Manage
  • nginx 负载服务器优化
  • Objective-C 中关联引用的概念
  • Quartz初级教程
  • scrapy学习之路4(itemloder的使用)
  • 分布式任务队列Celery
  • 检测对象或数组
  • 如何进阶一名有竞争力的程序员?
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ###项目技术发展史
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #在 README.md 中生成项目目录结构
  • (1)SpringCloud 整合Python
  • (33)STM32——485实验笔记
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (poj1.2.1)1970(筛选法模拟)
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (推荐)叮当——中文语音对话机器人
  • (转)http协议
  • (转)四层和七层负载均衡的区别
  • .bashrc在哪里,alias妙用
  • .NET CLR Hosting 简介
  • .Net Web窗口页属性
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET中winform传递参数至Url并获得返回值或文件