resnest

本文介绍了ResNet神经网络的创新点,尤其是残差结构,该结构通过shortcut或skip connections解决了信息丢失和梯度消失问题。ResNet有不同层数的版本,18和34层结构简单,50、101和152层结构中,通道数变化需要1x1卷积进行维度匹配。特别指出,50、101、152层在conv2阶段需特别处理升维问题。此外,每个大卷积层图像尺寸减半,步长调整通常在3x3卷积层进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创新点

提出残差结构,传统的神经网络在传递信息时会产生信息丢失,也会导致梯度爆炸或消失。ResNet在一定程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络只需要学习输入、输出差别的那一部分,简化学习目标和难度。从旁路引出一条路到输出也称为shortcut 或者 skip connections.

resnet 有不同的网络层数,分别是18,34,50,101,152。
在这里插入图片描述

其中18 34 层和 50, 101 ,152 层所用的结构有些不同。
在这里插入图片描述
注意在残差结构,旁之路引出的输入和输出的通道数是一样的,但是因为卷积过程中每次经过一个大的卷积,图像尺寸会缩小为原来的1/2,同时通道数也变为原来的两倍。所以在每个大卷积到下一个大卷积过渡的过程中会出现输入和输出通道数不对等的情况出现。
因此,在旁之路中引出了1x1的卷积用来对图像进行升维度。从而保持输入输出的维度一致。如下图中的虚线结构。

在这里插入图片描述

但是

比较特殊的一点是,50, 101, 152层数,在pool层像conv2 过渡的过程中,因为给出的通道数是64, 但是旁之路输出的通道数确实256进行, 因此在50 101 152 刚开始进行conv2时 ,残差结构就需要(虚线)升维。这是两种结构的需要注意点。

对于每一个大的卷积层的,他的图像尺寸都会减半,卷积步长的调整都是第一个在3x3卷积上进行调整的。

不足之处请多多包涵。

import torch
import torch.nn as nn

# 18,34-layers残差结构
class BasicBlock(nn.Module):
    expansion = 1
    def __init__(self, in_channel, out_channel, stride=1, downsample=None):
        super(BasicBlock,self).__init__()
        self.conv1 = nn.Conv2d(in_channels=in_channel, out_channels=out_channel,
                               kernel_size=3, stride=stride, padding=1, bias=False)
        self.bn1 = nn.BatchNorm2d(out_channel)
        self.relu = nn.ReLU(inplace=True)
        self.conv2 = nn.Conv2d(in_channels=out_channel, out_channels=out_channel,
                               kernel_size=3, stride=1, padding=1, bias=False)
        self.bn2 = nn.BatchNorm2d(out_channel)
        self.downsample = downsample

    def forward(self, x):
        identity = x
        if self.downsample is not None:
            identity = self.downsample(x)
        out = self.conv1(x)
        out = self.bn1(out)
        out 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值