resnet keras 结构_Day146:第二讲 ResNet

出处

论文:Deep Residual Learning for Image Recognition

作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun

ImageNet Top5错误率: 3.57%

主要思想

主要体现在 Residual(残差),从名字就可以看出,不学绝对值,而学差值。不去学绝对的完全重构映射,只学映射后相对于原来的偏差,即和identity的差值,绝对变相对,容易多了。前向,容易学习,后向,有了梯度高速通道,更好训练,能避免梯度消失。

残差块(以BasicBlock为例)

一般的网络结构下,输入Xl 直接经过两个卷积层,就可以得到输出Xl+1,而残差块则是将(通过两个卷积层所得到的输出)加上(网络的输入Xl),有的将这个过程成为skip connection。

02ff5bc286110c66282a933fa18a773c.png

skip connection 不只是可以直接将输入Xl与卷积结果相加,某些情况下,输入Xl与Xl+1维度不同,因此还可以加入1*1卷积对输入进行降维,从而使Xl与Xl+1维度相同,两者才可以相加。

2ca4e5e4deeacb513f08480283459487.png

网络结构

4a83ac3e7495cc587e7924eea13af692.png
  • 左边是BasicBlock,ResNet18和ResNet34就由其堆叠。
  • 右边是BottleNeck,多了一层,用1x1的卷积先降通道再升通道(首先做一个降维,然后做卷积,然后升维,这样做的好处是可以大大减少计算量,专门用于网络层数较深的的网络,ResNet-50以上的网络都有这种基础结构构成,如ResNet50、ResNet101、ResNet152就由其堆叠)。当要降尺度的时候,3x3卷积使用stride 2(同时旁边的shortcut也需要一个1x1的stride 2卷积,而非直接用输入的identity,这样可以使得后面相加的时候尺寸一致,因为不同层级的输入输出维度可能会不一样,但是结构类似)。平时的卷积都是stride 1。
  • 使用1x1卷积,对稀疏信息进行压缩,有效利用计算力,所以效率更高。

代码实现

  • BasicBlock的代码
def res_block_v1(x, input_filter, output_filter):    res_x = Conv2D(kernel_size=(3,3), filters=output_filter, strides=1, padding='same')(x)    res_x = BatchNormalization()(res_x)    res_x = Activation('relu')(res_x)    res_x = Conv2D(kernel_size=(3,3), filters=output_filter, strides=1, padding='same')(res_x)    res_x = BatchNormalization()(res_x)    if input_filter == output_filter:        identity = x    else: #需要升维或者降维        identity = Conv2D(kernel_size=(1,1), filters=output_filter, strides=1, padding='same')(x)    x = keras.layers.add([identity, res_x])    output = Activation('relu')(x)    return output
  • BottleNeck结构的代码

Pytorch 中的代码,注意到上图中为了减少计算量,作者将 256 维的输入缩小了 4 倍变为 64 进入卷积,在升维时需要升到 256 维,对应代码中的 expansion 参数:

class Bottleneck(nn.Module):    expansion = 4    def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1,                 base_width=64, dilation=1, norm_layer=None):        super(Bottleneck, self).__init__()        if norm_layer is None:            norm_layer = nn.BatchNorm2d        width = int(planes * (base_width / 64.)) * groups        # Both self.conv2 and self.downsample layers downsample the input when stride != 1        self.conv1 = conv1x1(inplanes, width)        self.bn1 = norm_layer(width)        self.conv2 = conv3x3(width, width, stride, groups, dilation)        self.bn2 = norm_layer(width)        self.conv3 = conv1x1(width, planes * self.expansion)        self.bn3 = norm_layer(planes * self.expansion)        self.relu = nn.ReLU(inplace=True)        self.downsample = downsample        self.stride = stride    def forward(self, x):        identity = x        out = self.conv1(x)        out = self.bn1(out)        out = self.relu(out)        out = self.conv2(out) # 要降尺度的话在这里,这里是stride 2的卷积        out = self.bn2(out)        out = self.relu(out)        out = self.conv3(out)        out = self.bn3(out)        if self.downsample is not None:# 需要通道升,尺度降            identity = self.downsample(x) # 实际上是一个stride 2卷积加bn        out += identity# 相加        out = self.relu(out)        return out

Pytorch中的使用

在 Pytorch 中使用 ResNet 只需要 4 行代码:

from torch import nn# torchvision 专用于视觉方面import torchvision   # pretrained :使用在 ImageNet 数据集上预训练的模型model = torchvision.models.resnet18(pretrained=True)# 修改模型的全连接层使其输出为你需要类型数,这里是10# 由于使用了预训练的模型 而预训练的模型输出为1000类,所以要修改全连接层# 若不使用预训练的模型可以直接在创建模型时添加参数 num_classes=10 而不需要修改全连接层model.fc = nn.Linear(model.fc.in_features, 10)

参考1:https://zhuanlan.zhihu.com/p/104657484

参考2:https://zhuanlan.zhihu.com/p/74230238

参考3:https://zhuanlan.zhihu.com/p/32781577

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

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

相关文章

html5内容切换特效,html5+jQuery图片和文字内容同时左右切换特效

html5jQuery图片和文字内容同时左右切换特效,点击图片或者点击左右按钮进行切换,图片转动以及文字内容动画效果切换。查看演示下载资源:22次 下载资源下载积分:20积分js代码 (function(){var bannerIndex 0;var $bannerBgs $(.j…

asp向不同的用户发送信息_【asp.net core 系列】 1 带你了解一下asp.net core

0. 前言 这是一个新的系列,名字是《http://ASP.NET Core 入门到实战》。这个系列主讲http://ASP.NET Core MVC,辅助一些前端的基础知识(能用来实现我们需要的即可,并非主讲)。同时这个系列也会在后续介绍http://ASP.NE…

html 怎么使用http请求数据类型,HTTP请求方式中8种请求方法(简单介绍)

HTTP工作原理HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行…

上行30m下行200m是多少宽带_套餐内有多少流量,就加送多少流量!电信流量攻势太凶猛!...

虽然6月6日国内发放了5G商用牌照,5G时代正式开启。但是对于用户来说,要想用上5G服务尚需等待一段时间,因为现在5G手机终端尚未普及、5G资费套餐也未出炉、运营商的5G网络还需要通过建设进一步扩大覆盖范围。在5G真正走近用户的前夕&#xff0…

vue项目html引入css,vue项目引入自定义.css的样式文件

ES6的引入方式:.vue文件中css文件引入import "../assets/common/common.css";//自定义.css的样式路径js文件的引入在main.js中:import API from ./assets/api/api.config.jsVue.prototype.$API API;P.S.:传统上,引入cs…

485通信原理_上位机开发之单片机通信实践

经常会有一些学员会问到上位机与单片机之间通信的问题,而我们经常会讲上位机与PLC之间通信,那么其实对上位机开发来说,不管是和PLC通信,还是和单片机通信,通信原理都是一样的。PLC的本质就是单片机,在单片机…

计算机数媒专业优势,27所院校新开设数字媒体艺术专业,“数媒”专业为什么这么火?...

原标题:27所院校新开设数字媒体艺术专业,“数媒”专业为什么这么火?今年2月,教育部公布了2020年度普通高等学校本科专业备案和审批结果。其中,有包括华中农业大学在内的全国27所院校新增备案了“数字媒体艺术”本科专业…

婚宴座位图html5,图解现代婚宴座位安排

中国人衣、食、住、行素来都有“礼”可循。对于婚宴来说更是讲究,桌子的摆放,座位的安排都需要经过深思熟虑。因为小小的桌椅就关系到婚宴的礼仪以及宾客的身份。下面就让专家为我们进行图解婚宴座位安排和礼仪的指导吧!婚礼座位安排&#xf…

c++ 图的连通分量是什么_学习数据结构第五章:图(图的遍历操作)

第五章:图(图的遍历操作)1.图的遍历图的遍历:从图中某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问依次且仅访问一次其实树的层次遍历和图的广度优先搜索类似,可以把这个二叉树看成一个图2.广度优先搜索(BFS)广度…

gson json转map_Java几种常用JSON库性能比较

点击上方“Java研发军团”,选择“置顶公众号”关键时刻,第一时间送达!阅读本文需要5分钟作者:飞污熊xncoding.com/2018/01/09/java/jsons.html本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。 每次都在网上看到别人说什…

计算机辅助设计工业产品cad竞赛试题,2017计算机辅助设计(工业产品CAD)赛项样题...

2017年全国职业院校技能大赛中职“计算机辅助设计(工业产品CAD)”赛项样题参赛选手须知1.比赛时间4小时,赛题共3大题4道题目,参赛选手需完成全部题目。2.参赛选手应始终保持赛题、图册完整,不得拆散赛题或图册。3.参赛选手须严格按照题目规定…

golang 捕获堆栈信息_【网络数据安全】为什么时间戳对于数据包捕获很重要

网络上发生的所有事件都是时间敏感的,这就是为什么在讨论数据包捕获和分析时,给数据包加上时间戳非常重要。此功能不仅可以防止和分析网络攻击,而且还能让你检查趋势和网络延迟。网络数据包时间戳可用于调查以某种方式影响网络性能的事件。例…

python语言的编程模式_一种基于Python语言的EDA开发平台及其使用方法与流程

本发明涉及EDA开发的技术领域,尤其是指一种基于Python语言的EDA开发平台及其使用方法。 背景技术: 目前,主流的EDA设计语言Verilog HDL能实现完整的芯片硬件逻辑电路开发,但是其代码密度低,可移植性和编程效率等等都存…

为什么只有奇次谐波_我们为什么要用UPS不间断电源?

所谓不间断电源系统,就是当停电时能够接替市电持续供应电力的设备,它的动力来自电池组,由于不间断电源反应速度快,停电的瞬间在4~8毫秒内或无中段时间下继续供应电力。为什么要用UPS不间断电源?现在全世界各国的大众供…

计算机一般的应用课题方向,计算机类哪个方向的课题好立项

课题申报计算机类哪个方向的课题好立项时间:2020年01月17日 所属分类:课题申报 点击次数:计算机技术如今应用也是非常广泛的,很多计算机从业者也需要申报课题来评定职称,然而他们课题申报关心的问题也很多:…

angular语言前端开发_web前端开发入门全套学习方法路径,兼职在家做网站也能月入上万...

前端学习路径1.WEB前端快速入门在本阶段,我们需要掌握 HTML 与 CSS 基础,当然,也包含 H5 和 C3 的新特性。这个部分内容非常简单,而且非常容易掌握。相信你也更愿意学习这个部分,毕竟他可以让你最直观的感受到前端的魅…

bagging算法_集成算法——三个“臭皮匠”级算法优于一个“诸葛亮”级算法

最近在打算法竞赛的时候用到了集成算法,效果还不错,索性就总结了一篇集成算法的文章,希望能帮到正在转行的数据分析师们。集成算法核心思想集成算法的核心思想是通过构建并结合多个学习器来完成学习任务,也就是通俗意义上的三个“…

计算机u盘驱动坏了如何的修复,U盘识别不了,小编教你U盘识别不了怎么修复

最近收到一个用户的提问,他说新买了了一个U盘,用了没几天,就发现电脑识别不了U盘。不像是U盘坏了,相信用过u盘的朋友遇到过U盘无法识别的情况吧,对于怎么解决这个问题,每个人都各有说辞,各种方案…

python读取html_从零开始的Python爬虫教程(一):获取HTML文档

前言:在上一节从零开始的Python爬虫教程(零):粗识HTML结构中,粗略给大家介绍了一下HTML文档,是为了在接下来的教程中让大家更容易理解和掌握。在接下来的教程中,需要大家提前安装python3.x版本,…

cmd长ping记录日志和时间_四个网络命令ping、arp、tracert、route的详细用法

网络相关的从业人员,都需要面对检测和解决网络故障的各种问题,实际案例中因为网络导致的故障也是最多的,今天我们和大家一起来学习一下解决网络故障时使用最多的四个网络命令。希望对大家以后的实际工作中的故障排除起到作用。1、Ping命令的用…