手撸网络结构—ResNet
ResNet 核心就是残差学习单元,相比常规神经网络残差学习单元能够避免出现梯度消失的现象。 ResNet使用两种残差单元,左图(BasicBlock)对应的是浅层网络,而右图(Bottleneck)对应的是深层网络。 在每组残差单元中,第一个单元需要进行下采样从而与单元输出的结果进行匹配。 resnet18采用的都是BasicBlock进行的叠加,前两组残差单元如下图: resnet50采用的都是Bottleneck进行的叠加,前两组残差单元如下图: 文字功力有限,直接上代码: import torch import torch . nn as nn from torchsummary import summary def conv3x3 ( in_planes , out_planes , padding = 0 , stride = 1 , bn = True , rl = True ) : """3x3 convolution with padding""" layers = [ ] layers . append ( nn . Conv2d ( in_planes , out_planes , kernel_size = 3 , padding = padding , stride = stride ) ) if bn : layers . append ( nn .