本文主要是介绍pytorch-深度残差网络resnet,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 1. ResNet的由来
- 2. ResNet pytorch实现
1. ResNet的由来
2014年网络层次达到了22层以后,随着层数的增多,反而性能会越来越差,其原因是ΔE对ΔWij的导数依赖于上一层的δ,由于δ误差不断积累,导致出现梯度弥散的问题。
假设网络有30层,为了保证在22层基础上增加8层后,至少不会比22层差,那么就跳过8层网络,增加一个shortcut短路连接,然后用22层的梯度与8层梯度计算结果进行按元素相加操作,从而使得30层的结果至少不会比22层差。
普通的一个神经网络单元是Conv-BN-Pool-ReLu,而resnet的一个unit是Conv-relu-Conv-relu
一般深度残差模块是2~3层。
上图中展示了输出输出都是256,使用的都是3x3的卷积核,参数量大概是600k,而使用1x1的核将256降至64,再使用3x3的核,最后用一个1x1的核将维度扩展到256,参数量大概是70k左右,因此残差模块,在中间过程不必保持和输入维度一致。
2. ResNet pytorch实现
如下图,pytorch实现了一个残差模块,注意:elementwise必须保证相加的tensor维度一致,因此如果输入与输出维度不一致,代码中通过extra函数将输入通过1x1的核将维度扩展成和输出一致。
这篇关于pytorch-深度残差网络resnet的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!