学习笔记16:残差网络

转自:https://www.cnblogs.com/miraclepbc/p/14368116.html

产生背景

随着网络深度的增加,会出现网络退化的现象。
网络退化现象形象化解释是在训练集上的loss不增反降。
这说明,浅层网络的训练效果要好于深层网络
一个想法就是,如果将浅层网络的特征传到深层网络,那么深层网络的训练效果不会比浅层网络差
举个例子,就是假设总共有50层,20层的训练结果就比50层的好了,因此可以将18层与98层之间连接一个直接映射
这样随着网络的加深,训练效果就不会降低了

残差块

残差块的数学表示:
xl+1=xl+F(xl,Wl)𝑥𝑙+1=𝑥𝑙+𝐹(𝑥𝑙,𝑊𝑙)
xl𝑥𝑙相当于是一个直接映射,F(xl,Wl)𝐹(𝑥𝑙,𝑊𝑙)是残差部分

在这个网络结构中,右侧指的就是残差部分,左侧是直接映射

代码实现

class ResnetbasicBlock(nn.Module):
    def __init__(self, in_channels, out_channels):
        super().__init__()
        self.conv1 = nn.Conv2d(in_channnels, out_channels, kernel_size = 3, padding = 1, bias = False)
        self.bn1 = nn.BatchNorm2d(out_channels)
        self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size = 3, padding = 1, bias = False)
        self.bn2 = nn.BatchNorm2d(out_channels)
    def forward(self, x):
        residual = x
        out = self.conv1(x)
        out = F.relu(self.bn1(out), inplace = True)
        out = self.conv2(out)
        out = F.relu(self.bn2(out), inplace = True)
        out = out + residual
        return F.relu(out)
posted @   有何m不可  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2023-06-04 Kubescape入门
点击右上角即可分享
微信分享提示