美文网首页
[动手学深度学习-PyTorch版]-5.11卷积神经网络-残差

[动手学深度学习-PyTorch版]-5.11卷积神经网络-残差

作者: 六千宛 | 来源:发表于2021-06-07 09:57 被阅读0次

    5.11 残差网络(ResNet)

    让我们先思考一个问题:对神经网络模型添加新的层,充分训练后的模型是否只可能更有效地降低训练误差?理论上,原模型解的空间只是新模型解的空间的子空间。也就是说,如果我们能将新添加的层训练成恒等映射f(x)=x,新模型和原模型将同样有效。由于新模型可能得出更优的解来拟合训练数据集,因此添加层似乎更容易降低训练误差。然而在实践中,添加过多的层后训练误差往往不降反升。即使利用批量归一化带来的数值稳定性使训练深层模型更加容易,该问题仍然存在。针对这一问题,何恺明等人提出了残差网络(ResNet) [1]。它在2015年的ImageNet图像识别挑战赛夺魁,并深刻影响了后来的深度神经网络的设计。

    5.11.2 残差块

    image.png
    image.png
    image.png

    残差块的实现如下。它可以设定输出通道数、是否使用额外的1×1卷积层来修改通道数以及卷积层的步幅。

    import time
    import torch
    from torch import nn, optim
    import torch.nn.functional as F
    
    import sys
    sys.path.append("..") 
    import d2lzh_pytorch as d2l
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    
    class Residual(nn.Module):  # 本类已保存在d2lzh_pytorch包中方便以后使用
        def __init__(self, in_channels, out_channels, use_1x1conv=False, stride=1):
            super(Residual, self).__init__()
            self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1, stride=stride)
            self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1)
            if use_1x1conv:
                self.conv3 = nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride)
            else:
                self.conv3 = None
            self.bn1 = nn.BatchNorm2d(out_channels)
            self.bn2 = nn.BatchNorm2d(out_channels)
    
        def forward(self, X):
            Y = F.relu(self.bn1(self.conv1(X)))
            Y = self.bn2(self.conv2(Y))
            if self.conv3:
                X = self.conv3(X)
            return F.relu(Y + X)
    

    下面我们来查看输入和输出形状一致的情况。

    blk = Residual(3, 3)
    X = torch.rand((4, 3, 6, 6))
    blk(X).shape # torch.Size([4, 3, 6, 6])
    

    我们也可以在增加输出通道数的同时减半输出的高和宽。

    blk = Residual(3, 6, use_1x1conv=True, stride=2)
    blk(X).shape # torch.Size([4, 6, 3, 3])
    

    相关文章

      网友评论

          本文标题:[动手学深度学习-PyTorch版]-5.11卷积神经网络-残差

          本文链接:https://www.haomeiwen.com/subject/cxckeltx.html