ResNet解读

ResNet是由2015年的论文:Deep Residual Learning for Image Recognition提出,现在在深度学习网络中应用越来越广泛。

ResNet

提出背景就是深层神经网络训练困难的问题,究其原因主要是因为梯度消失/爆炸,导致模型难以收敛,尽管batch normalization的使用可以使几十层的网络使用SGD算法训练收敛,但是更深的网络就没办法了。就算能收敛,也还是存在模型性能退化的问题,模型误差不降反升。
在这里插入图片描述
为了解决这个问题,论文作者提出残差结构,让网络不去直接拟合目标函数H(x),而是去拟合它的残差F(x)=H(x)-x,结构如下图:
在这里插入图片描述
这种结构可以较好的解决梯度消失的问题。梯度消失产生的原因就是在误差反向传播过程中,每一层都要乘以该层激活函数的导数,对于sigmoid型激活函数,其导数始终小于等于1的,所以反向传播过程中误差越来越小,梯度也越来越小,参数也就越来越难更新。当然,ReLU激活函数其在x>0的部分导数为1,可以一定程度上缓解梯度消失问题。
说完梯度消失,再来看残差结构,其在求梯度时会有一个常数项存在,就不存在梯度消失的问题了,如下图(图片源于博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TensorFlow是一个由Google开发的开源机器学习库,用于构建和训练各种机器学习模型。其中一个流行的模型是ResNet50,它是一个深度卷积神经网络模型,由50个卷积层组成。 在TensorFlow中,我们可以使用tf.keras.applications模块中的ResNet50类来构建ResNet50网络模型。下面是一个简单的代码示例: ``` import tensorflow as tf from tensorflow.keras.applications import ResNet50 # 定义输入张量的形状 input_shape = (224, 224, 3) # 创建ResNet50对象,包括预训练的权重 resnet50 = ResNet50(weights='imagenet', input_shape=input_shape) # 打印模型的摘要信息 resnet50.summary() ``` 首先,我们导入所需的模块,其中tf.keras.applications模块包含了许多常用的预训练模型。然后,我们定义了输入张量的形状为(224, 224, 3),这是ResNet50模型预期的输入形状。 接下来,我们创建了ResNet50对象,并使用'imagenet'参数来加载预训练的权重。这意味着我们可以使用该模型在ImageNet数据集上进行分类任务,并获得高性能的结果。 最后,我们打印了模型的摘要信息,这包括每个层的名称、输出形状和参数数量等。这对于理解和调试模型非常有用。 通过这段代码,我们可以看到如何使用TensorFlow中的ResNet50类来构建和加载预训练的ResNet50模型。这样我们就可以将其用于各种图像分类任务,或者在其基础上进行更进一步的调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值