【PyTorch学习】(一)ResNet源码研读

本文是作者在学习PyTorch时对ResNet模型源码的研读笔记,重点讲解了ResNet中Bottleneck类的设计,并对比了与BasicBlock的区别。通过结构图辅助理解,介绍了ResNet模型的不同版本,如ResNet18、ResNet50等,并邀请读者共同讨论交流。

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

 

       最近在学习PyTorch,想着光看不动手不行,就尝试着对着torchvision.models下的ResNet实现写了一遍,顺带将ResNet复习了一下,并将在研读源码过程中自己做的一点笔记和理解简单的分享一下。

torchvision.models.resnet下有ResNet18、ResNet34、ResNet50、ResNet101、ResNet152五种结构的ResNet实现。

主要的区别在于:

  1. 18层和34层的ResNet用到的结构是"两个3*3的conv层堆叠"的BasicBlock,而50,101,152层的ResNet用到了Bottleneck结构,所以源码中也分别有BasicBlock和Bottleneck的实现。
  2. 相同的BasicBlock/Bottleneck重复堆叠的次数不同。

贴一张ResNet的结构图可能会更清晰一些:

从而主体核心代码ResNet类的初始化形式即为:

# block:BasicBlock or Bottleneck
# layers: 根据自己需要搭积木。ResNet50的设置为layers=[3, 4, 6, 3]
# num_classes:根据自己需要设置最终fc层输出的分类数目,默认是ImageNet的1000类
def __init__(self, block, layers, num_classes=1000):

所以接下来主要重点解读Bottleneck类和ResNet类的实现。

 

一、Bottleneck类源码解读

同样,先贴一张Bottleneck的结构图(图片来自网络,依据tensorflow画的,PyTorch的image Tensor应该是(N,C,H,W)),图和代码相结合更有助于理解。

class Bottleneck(nn.Module):
    '''B
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值