Resnet讲解

Resnet

  1. 前言
  2. 了解什么是过拟合问题
  3. Resnet介绍

1、前言

从各位学者无数次实验中都可以得出一个普遍的规律就是更深的网络有利于提供准确率,训练出来的模型的效果更加好,但这也衍生出一系类的问题,当我们的网络过于深后,我们的准确率会到达一定水平就会出现大幅度的下降,比更浅层的网络的准确率更低。同时由于网络的层数的加深,网络所需要的参数会更多,导致网络的训练的速度更加缓慢。
一般的来说,我们的网络由于深度过深导致的准确率急速下降的原因之一就是:出现了过拟合

2、了解什么是过拟合问题

在这里插入图片描述
从上图我们可以得到两种结论:
1、当我们的数据的数据是完全百分百正确,没有一丝误差的时候,我们很显然希望我们训练出来的模型是绿色这条线,绿色的线他完全拟合于所有的数据,当我们属于进行测试的时候,能够准确输出正确的答案
2、但是保证数据集的完全正确几乎是一件完全不可能的事,并且测试集对于我们来说是未知的数据。此时,我们希望我们的训练出来的模型应该是黑色这条线,我们通常称绿色这条线为过拟合现象。即使黑色的线不能够完全拟合所有的数据,存在一定的误差。但是对于测试数据的不确定性,黑色的线则具有一定的兼容性,在测试数据集表现会远优于绿色模型。

3、Resnet 介绍

ResNet(Residual Neural Network)由微软研究院的Kaiming He等四名华人提出,通过使用ResNet Unit成功训练出了152层的神经网络,并在ILSVRC2015比赛中取得冠军,在top5上的错误率为3.57%,同时参数量比VGGNet低,效果非常突出。ResNet的结构可以极快的加速神经网络的训练,模型的准确率也有比较大的提升。同时ResNet的推广性非常好,甚至可以直接用到InceptionNet网络中。

ResNet的主要思想是在网络中增加了直连通道,即Highway Network的思想。此前的网络结构是性能输入做一个非线性变换,而Highway Network则允许保留之前网络层的一定比例的输出。ResNet的思想和Highway Network的思想也非常类似,允许原始输入信息直接传到后面的层中,如下图所示。
在这里插入图片描述
这样的话这一层的神经网络可以不用学习整个的输出,而是学习上一个网络输出的残差,因此ResNet又叫做残差网络。
在这里插入图片描述
左图一般用于较浅的网络,右边的一般用于较深的网络
左图使用两个33的卷积,输出的通道数是64,
右图是一个1
1的卷积输出的是64维,33的卷积输出是64维,11的卷积输出是256维

第一个1x1的卷积把256维channel降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。

Resnet常见的网络结构图

在这里插入图片描述
可以看出在18层,34层这样的神经网络当中,通常采用的是两层的残差的神经网络。
但是在之后的50、101、152成的神经的网络当中,通常采用的是三层的残差网络,这样有达到降低参数的目的。

VGG 和 Resnet

在这里插入图片描述
论速度: VGG16层的神经网络在forward传播的速度是0.152s/batch
Resnet152层的神经网络在forward传播的速度是0。203/batch

实现Resnet网络(152层为例子)

代码块:
降采样: 使用最大池化层

def subsample(inputs, factor, scope=None): #这是一个降采样 输入 采样因子 对输入进行一个降采样
  if factor == 1:
    return inputs
  else:
    return slim.max_pool2d(inputs, [1, 1], stride=factor,padding='SAME', scope=scope) #最大池化采样

三层的残差网络

#1*1的卷积
residual = slim.conv2d(input,outputs, [1, 1], stride=1,scope='conv1')
#3*3的卷积网络
residual = conv2d_same(residual, outputs, 3, stride, scope='conv2')
#1*1的卷积网路
residual = slim.conv2d(residual, depth, [1, 1], stride=1,normalizer_fn=None, activation_fn=None,scope='conv3')

残差的结果+采样

output = shortcut + residual #shortcut采样的结果
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值