CNN网络:ResNet(四)

news/2024/5/20 22:20:48/文章来源:https://blog.csdn.net/qq_41048761/article/details/128942436

ResNet论文[https://arxiv.org/pdf/1512.03385.pdf]。RestNet网络结构ResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的,检测,分割,识别等领域里得到广泛的应用。

当更深的网络能够开始收敛时,一个退化问题就暴露出来了。随着网络深度的增加,精度达到饱和,然后开始退化。出乎意料的是,这种退化不是由过拟合引起的,向适当深度的模型中添加更多的层会导致更高的训练误差。ReNet网络就是来解决网络退化的问题,通过在网络架构多加入一条恒等映射,经过一次卷积,如果效果变差,则保持权重参数不变,相当于并没有做此次卷积。这样的话,就保证了神经网络不会随着网络层数的增加反而效果变差,也就阻止了模型退化的问题。

ResNet模型亮点

  • 提出Residual模块

  • 使用Batch Normalization加速训练,丢弃dropout

  • 易于收敛,很好地解决了退化的问题,模型可以很深,准确率大大提高

ResNet的网络结构如图所示:

我们按照ResNet-18来分析一下:

第一层卷积conv1:输入图像的size是224*224*3,使用64个size是7*7,stride步长为2,padding填充为3的卷积核,卷积后的输出size是112*112*64。

第二层池化:使用size是3*3的核进行最大池化,stride步长为2,池化后的输出size是56*56*64。

第三层conv2_x:两个卷积构成一个残差块,后面的x2的意思就是两个3*3,64的卷积层。残差块的公式如下。残差块分成两部分直接映射部分和残差部分。 h(xl) 是直接映射,反应在图1中是左边的曲线; F(xl,Wl) 是残差部分,conv2_x就是由两个卷积操作构成。

在卷积网络中, xl 可能和 xl+1 的Feature Map的数量不一样,这时候就需要使用 1×1 卷积进行升维或者降维。这时,残差块表示如下公式。其中 h(xl)=Wl′x 。其中 Wl′ 是 1×1 卷积操作,但是实验结果 1×1 卷积对模型性能提升有限,所以一般是在升维或者降维时才会使用。

残差块的PyTorch实现:

class BasicBlock(nn.Module):def __init__(self,in_channels,out_channels,stride=[1,1],padding=1) -> None:super(BasicBlock, self).__init__()# 残差部分self.layer = nn.Sequential(nn.Conv2d(in_channels,out_channels,kernel_size=3,stride=stride[0],padding=padding,bias=False),nn.BatchNorm2d(out_channels),nn.ReLU(inplace=True), # 原地替换 节省内存开销nn.Conv2d(out_channels,out_channels,kernel_size=3,stride=stride[1],padding=padding,bias=False),nn.BatchNorm2d(out_channels))# shortcut 部分# 由于存在维度不一致的情况 所以分情况self.shortcut = nn.Sequential()if stride[0] != 1 or in_channels != out_channels:self.shortcut = nn.Sequential(# 卷积核为1 进行升降维# 注意跳变时 都是stride==2的时候 也就是每次输出信道升维的时候nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride[0], bias=False),nn.BatchNorm2d(out_channels))def forward(self, x):out = self.layer(x)out += self.shortcut(x)out = F.relu(out)return out

ResNet-18的PyTorch实现

# 采用bn的网络中,卷积层的输出并不加偏置
class ResNet18(nn.Module):def __init__(self, BasicBlock, num_classes=10) -> None:super(ResNet18, self).__init__()self.in_channels = 64# 第一层作为单独的 因为没有残差快self.conv1 = nn.Sequential(nn.Conv2d(3,64,kernel_size=7,stride=2,padding=3,bias=False),nn.BatchNorm2d(64),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))# conv2_xself.conv2 = self._make_layer(BasicBlock,64,[[1,1],[1,1]])# conv3_xself.conv3 = self._make_layer(BasicBlock,128,[[2,1],[1,1]])# conv4_xself.conv4 = self._make_layer(BasicBlock,256,[[2,1],[1,1]])# conv5_xself.conv5 = self._make_layer(BasicBlock,512,[[2,1],[1,1]])self.avgpool = nn.AdaptiveAvgPool2d((1, 1))self.fc = nn.Linear(512, num_classes)#这个函数主要是用来,重复同一个残差块def _make_layer(self, block, out_channels, strides):layers = []for stride in strides:layers.append(block(self.in_channels, out_channels, stride))self.in_channels = out_channelsreturn nn.Sequential(*layers)def forward(self, x):out = self.conv1(x)out = self.conv2(out)out = self.conv3(out)out = self.conv4(out)out = self.conv5(out)# out = F.avg_pool2d(out,7)out = self.avgpool(out)out = out.reshape(x.shape[0], -1)out = self.fc(out)return out

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

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

相关文章

手机逻辑系统(2)---逻 辑 音 频 电 路

第二节 逻 辑 音 频 电 路 逻辑音频电路在手机电路中占有重要的地位,它是手机系统的心脏。 逻辑音频电路包含无线通信呼叫处理、音频处理、数字语音处理、射频逻辑接口电路、各种射频功能控制、电源管理和用户接口模组等。 任何一部手机的逻辑音频电路部分都包含以上的一些功能…

1.2.4存储结构-磁盘管理:磁盘优化分布存储、磁盘优化分布存储例题

1.2.4存储结构-磁盘管理:磁盘优化分布存储、磁盘优化分布存储例题磁盘优化分布存储磁盘优化分布存储 假设某磁盘的每个磁道划分成11个物理块,每块存放1个逻辑记录。逻辑记录R0,R1,…,R9,R10存放在同一个磁…

将U盘制作为启动盘

将U盘制作为启动盘 制作之前需要先保证U盘中没有重要的文件,因为制作时会将已有文件删除 1 安装制作软件【wePE】 ①官网选择对应PE版本下载安装 官网下载地址:http://www.wepe.com.cn IT天空的U盘装机助理:https://www.itiankong.net/thread-357573-1…

Ubuntu18 安装python3.7及多版本切换

1.安装3.7添加源sudo add-apt-repository ppa:deadsnakes/ppa检查更新sudo apt-get update 安装python3.7sudo apt-get install python3.72.使用 update-alternatives 来为整个系统更改Python 版本查看python替代版本信息~$ update-alternatives --display python但是结果为upd…

数字化发展趋势:打破企业边界,实现产业互联

据中欧商业在线发布的《2022未来管理人才白皮书》显示,在参加调研的1000家企业中,有77%的企业已经在公司业务中运用了数字化技术;更有7%的企业表示将在更深层面推进数字化转型工作。 当企业在业务层面完成数字化转型,下一步会走向…

知识图谱简介

知识图谱简介 知识图谱,是结构化的语义知识库,用于迅速描述物理世界中的概念及其相互关系,通过知识图谱能够将Web上的信息**、数据以及链接关系聚集为知识,使信息资源更易于计算、理解以及评价,并能实现知识的快速响应…

Keil中代码的颜色设置 ( 很 全 )[通俗易懂](转载)

https://cloud.tencent.com/developer/article/2081534Keil中代码的颜色设置 ( 很 全 )[通俗易懂]发布于2022-08-25 12:26:13阅读 1.8K0大家好,又见面了,我是你们的朋友全栈君。因为长时间要编程,对于keil上的黑字白底,如果看久了…

Python实现的通讯录

"为何表情,要让这世界安排?"诶,我们也对python的一些基础语法有了一定能的了解了。并且在这基础上,学习了python中的文件操作,那么有了这些东西以后啊,我们能做什么呢?或许对很多数据…

揭秘PPTC(自恢复保险丝)的四大使用原则

PPTC自恢复保险丝有贴片式以及插件式两种,封装形式多样,型号齐全,那么,在使用过程中,应该要注意什么?你知道吗?接下来,优恩小编将为你揭秘PPTC(自恢复保险丝)的四大使用原则。一、规…

Spring boot项目开发实战一(环境搭建)

技术栈选型 最近在实习好久没时间做过项目了,本次将借用公司的技术完成一个基于spring boot的实战项目,同时也巩固spring的相关知识。项目大体是一个后台管理系统,没有前台,用于数据分析和可视化。如下是初步的可视化界面&#x…

MySQL8.0 集群搭建

文章目录环境准备安装 MySQL 8.0配置主服务配置从服务器主从复制:即主服务器上的所有操作(创建库,修改表等)会被同步到从服务器上,但是在从服务器上的操作不会进入到主服务器中 环境准备 两台服务器,一主…

【Classical Network】Xception

文章目录深度可分离卷积Inception发展GoogleNetInception Networkinception V1inception V2inception V3inception V4Xception参考文章 经典卷积架构的PyTorch实现:Xception 参考文章 卷积神经网络结构简述(二)Inception系列网络 github 项目…

Springboot扩展点之InstantiationAwareBeanPostProcessor

前言前面介绍了Springboot的扩展点之BeanPostProcessor,再来介绍另一个扩展点InstantiationAwareBeanPostProcessor就容易多了。因为InstantiationAwareBeanPostProcessor也属于Bean级的后置处理器,还继于BeanPostProcessor,因此Instantiatio…

【Spring Cloud Alibaba】(二)微服务调用组件Feign原理+实战

系列目录 【Spring Cloud Alibaba】(一)微服务介绍 及 Nacos注册中心实战 本文目录系列目录前言什么是RPC?Feign和OpenFeign都是什么?HTTP调用 vs Feign(RPC)调用单独使用Feign实战Feign核心源码解读Feign整体设计架构Spring Clo…

PyQt5学习 阶段一

前言:PyQt5介绍PyQt是基于Digia公司强大的图形程序框架Qt的Python接口,由一组Python模块构成,它是一个创建GUI应用程序的工具包,由Phil Thompson开发。PyQt5的基本类:官方提供的帮助网址:https://www.river…

每天10个前端小知识 【Day 8】

前端面试基础知识题 1. Javascript中如何实现函数缓存?函数缓存有哪些应用场景? 函数缓存,就是将函数运算过的结果进行缓存。本质上就是用空间(缓存存储)换时间(计算过程), 常用于…

macbook M1 Homebrew配置导致本机的Kafka启动失效

笔者想在macbook M1上通过Homebrew安装Kafka 整体流程为: 安装kafka brew install kafka 启动zookeeper brew services start kafka启动kafka brew services start kafka启动provider,创建一个jxztest的主题 kafka-console-producer --bootstrap-server…

金仓数据库物理备份和还原

物理备份和还原 物理备份指的是将数据库中的相关物理文件转存储到指定的备份文件中,KES支持sys_rman、sys_basebackup、cp等多种物理备份方法。 一、物理备份类型 1、冷备 (1)冷备也叫文件系统级别备份。 (2)备份时…

3D设计师的激情吐槽 我与甲方爸爸不得不说的故事

苦逼的玉树临风的设计师们, 总是会熬夜加班受尽甲方爸爸的 折磨 宠爱~ 每每这一刻我都想深情地问一句, 设计师们,你们还好吗?今天就让我来带着你们, 重温这些 噩梦 温情时刻吧! - 1 - 他, 那个自…

02-linux用户和权限-04-生产环境linux服务器权限控制实例

文章目录1. 权限规划1.1 root 组1.2 docker组1.3 运维组1.3.1 项目运维负责人1.3.2 高级运维人员1.3.3 初级运维人员1.4 开发组1.4.1 开发负责人1.4.1 开发人员2. 实施2.1 deploy用户2.2 创建运维组2.2 创建开发组2.4 修改sudo权限1. 权限规划 1.1 root 组 用户名&#xff1a…