对于一些重复的layer可以采用nn.Sequential先进行封装layer,然后调用_make_layer_进行实现
以ResNet18/34为例
模型图:
ResNet中将一个跨层直连的单元叫做Residual block,其结构如下,当输入和输出的通道不一致的时候,需要一个专门的单元将二者转成一致,使其可以相加。
实现:
class BasicBlock(nn.Module):
expansion = 1
def __init__(self,in_channels,out_channels,stride=1,downsample=None):
super(BasicBlock,self).__init__()
self.conv1 = conv3x3(
in_channels,out_channels,stride=stride
)
self.bn1 = nn.BatchNorm2d(out_channels)
self.relu = nn.ReLU(inplace=True)
self.conv2 = conv3x3(