18层、34层网络对应的残差结构
浅层网络主线由两个3x3的卷积层链接,相加后通过relu激活函数输出。还有一个shortcut捷径
参数解释
expansion = 1 : 判断对应主分支的残差结构有无变化
downsample=None : 下采样参数,默认为none
stride步距为1,对应实线残差结构 ; 步距为2,对应虚线残差结构
self.conv2 = nn.Conv2d(in_channels=out_channel :卷积层1的输出即为输入
讯享网
定义正向传播
identity = x : shortcut捷径上的输出值
identity = self.downsample(x) : 将输出特征矩阵x输入到下采样函数中得到捷径分支的输出
讯享网
50层、101层、152层神经网路对应的残差结构
深层网络主线由一个1x1的降维卷积层,3x3卷积层、1x1升维卷积层和一个shortcut捷径组成。
按照残差结构进行定义,大致与BasicBlock参数一样,不同的是expansion=4,卷积核个数是之前的4倍。
定义正向传播
if self.downsample is not None : is None是实线 is not None 是虚线
讯享网
block, 根据定义不同的层结构传入不同的block
blocks_num, 所使用残差结构的数目、参数列表
num_classes=1000, 分类个数
include_top=True, 在ResNet基础上搭建其他的网络
self.layer1 对应conv2_x
self.layer2 对应conv3_x
self.layer3 对应conv4_x
self.layer4 对应conv5_x 这一系列的残差结构都通过_make_layer函数实线
self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) # output size = (1, 1) 不管输入是多杀,通过自适应平均池化下采样都会输出(1,1)
self.fc = nn.Linear(512 * block.expansion, num_classes) 通过全连接输出节点层,输入的节点个数是通过平均池化下采样层后的特征矩阵展平后所得到的节点个数,但是由于节点的高和宽都是1,所以节点的个数=深度
block, 定义的残差结构
channel, 残差结构中卷积层使用卷积核的个数
block_num, 该层包含了几个残差结构
block(传入第一层残差结构
self.in_channel,
channel, 主分支第一个卷积层卷积核的个数
downsample=downsample, 下采样函数
for _ in range(1, block_num): 通过循环,将剩下一系列的实线残差结构压入进去
return nn.Sequential(*layers) 非关键字传入,将定义的一系列层结构组合并返回。
讯享网
定义正向传播
传入的参数分别按照定义的顺序传入。
讯享网
后续继续补充。。。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/153164.html