本文主要是介绍对残差网络的浅显理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
随心笔记
对于深层神经网络,并不是层数越深,效果就会越好。对于模型的准确率会随着层数加深呈现一种上升再下降的趋势。为什么会形成退化呢?
因为随着模型准确率的提升,提升到一定程度后,没有学到恒等映射(输入x,输出也是x),我们希望学习到足够深时(n层),后面的网络什么都不做即(m-n)是没有用的。可是事实却不是这样,因为后面的非恒等映射,使得模型被破坏。
这里就引入了残差网络。
我们通过shaorcut connections把输入的x传到输出的H(x)中。我们希望H(x)= x,但是我们经过两个全连接层也好,卷积层也罢,F(x)都会存在。我们称F(x)= H(x) - x叫做残差。我们把这样的结构叫做残差单元。
这样,H(x)就是我们的预测值,x是我们的观测值,F(x)就变成了预测值与观测值之差。后面的训练目标就是要将F(x)结果逼近于0,使到随着网络加深,准确率不下降。
在StarGAN中,残差网络由6个残差单元构成。
残差单元:
卷积层
归一化
激活函数Relu(这里用relu的好处是ReLU能够将负数激活为0,过滤了负数的线性变化,也能够更快的使得F(x)=0)
卷积层
归一化
nn.Conv2d(dim_in, dim_out, kernel_size=3, stride=1, padding=1, bias=False),nn.InstanceNorm2d(dim_out, affine=True, track_running_stats=True),nn.ReLU(inplace=True),nn.Conv2d(dim_out, dim_out, kernel_size=3, stride=1, padding=1, bias=False),nn.InstanceNorm2d(dim_out, affine=True, track_running_stats=True))
参考https://blog.csdn.net/weixin_42354073/article/details/89367315
https://blog.csdn.net/zimiao552147572/article/details/104547017/
这篇关于对残差网络的浅显理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!