ResNet-50
时间: 2025-03-10 13:07:07 浏览: 13
ResNet-50架构概述
ResNet-50是一种深度卷积神经网络,具有50层深度。该模型通过引入残差块(residual block),解决了深层网络训练过程中遇到的退化问题[^2]。
架构特点
在网络设计方面,ResNet-50采用了瓶颈结构(bottleneck structure)。具体来说,在34层版本的基础上,每个由两层组成的模块被替换成了三层瓶颈模块,这不仅增加了网络深度还提高了计算效率。整个过程使用了选项B来处理维度变化的情况。
对于每一组少量堆叠在一起的基础组件——即所谓的“模块”,都应用了残差学习方法。这些模块按照特定的方式构建,使得信息能够更加顺畅地传递到更深的层次中去[^3]。
参数量与性能对比
尽管拥有更多的层数,但是由于精心设计的架构,ResNet-50相比于其他较浅但宽泛的传统CNNs(比如VGG系列),其参数总量反而较少。例如,当达到152层时,ResNet仍然保持较低的参数数量,而FLOPs则约为38亿次浮点运算次数[^1]。
import torch.nn as nn
class Bottleneck(nn.Module):
expansion = 4
def __init__(self, inplanes, planes, stride=1, downsample=None):
super(Bottleneck, self).__init__()
self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False)
self.bn1 = nn.BatchNorm2d(planes)
self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride,
padding=1, bias=False)
self.bn2 = nn.BatchNorm2d(planes)
self.conv3 = nn.Conv2d(planes, planes * self.expansion, kernel_size=1, bias=False)
self.bn3 = nn.BatchNorm2d(planes * self.expansion)
self.relu = nn.ReLU(inplace=True)
self.downsample = downsample
self.stride = stride
def forward(self, x):
residual = x
out = self.conv1(x)
out = self.bn1(out)
out = self.relu(out)
out = self.conv2(out)
out = self.bn2(out)
out = self.relu(out)
out = self.conv3(out)
out = self.bn3(out)
if self.downsample is not None:
residual = self.downsample(x)
out += residual
out = self.relu(out)
return out
上述代码展示了如何实现一个标准的ResNet-50中的瓶颈单元。此单元内部包含了三个连续的卷积操作以及批标准化和激活函数的应用;同时它也支持跨阶段连接(skip connection)机制以便于梯度传播。
相关推荐














