各个分类网络的结构(持续更新)

文章目录

  • 一、LeNet
  • 二、AlexNet
  • 三、VGG
  • 四、ResNet详解

PS: 以下内容只详细讲解ResNet网络,在其基础上,其余网络只展示基本结构

torchvision.datasets.数据集简介:
(1)MNIST:10个类,60000个训练数据,10000个测试数据,(batch_size, 1, 28, 28)
(2)CIFAR10:10个类,50000个训练数据,10000个测试数据,(batch_size, 3, 32, 32)
(3)CIFAR100:100个类,50000个训练数据,10000个测试数据,(batch_size, 3, 32, 32)(20个超类,每个超类有5个小类,每张图两个标签)

一、LeNet

二、AlexNet

(1)使用官方接口:torchvision.models.alexnet(pretrained=False, num_classes=1000, dropout=0.5)
(2)上述参数可以自己设置(如num_classes=10),输入图片的尺寸也可以是任意的,但每层输出的通道数是相同的,图片大小会相应成倍变化
(3)官方源码的每层通道数或padding与下图略有不同,可以自己按需要进行修改

三、VGG

用法与上面AlexNet一致,且官方源码结构和下图完全一致。

四、ResNet详解

  1. 参考1,参考2
  2. 直接调用官方torchvision.models.resnet18()等函数,通过下面第6点pytorch官方源码分析可知,(1)可自定义的位置参数有:pretrained=False, progress=True, num_classes=1000,(2)输入图片的尺寸可以是任意的,但每层输出的通道数和输入图片(3,224,224)时相同,图片大小相应成倍变化。
  3. 以输入图片(3,224,224)为例分析每层的输出 → 64,k = 7 , s = 2 , p = 3 c o n v 1 \xrightarrow[{{\text{64,k}} = 7,s = 2,p = 3}]{{conv1}} conv1 64,k=7,s=2,p=3​(64,112,112) → 64,k = 3 , s = 2 , p = 1 M a x P o o l \xrightarrow[{{\text{64,k}} = 3,s = 2,p = 1}]{{MaxPool}} MaxPool 64,k=3,s=2,p=1​(64,56,56) → ∗ 4 B a s i c B l o c k ( R e s N e t 18 , 34 ) / B o t t l e n e c k ( R e s N e t 50 , 101 , 152 ) \xrightarrow[*{{\text{ 4}}}]{{BasicBlock(ResNet18,34)/Bottleneck(ResNet50,101,152)}} BasicBlock(ResNet18,34)/Bottleneck(ResNet50,101,152) ∗ 4​(512/2048,7,7) → outputsize= ( 1 , 1 ) A d a p t i v e A v g P o o l 2 d \xrightarrow[{{\text{outputsize=}(1,1)}}]{{AdaptiveAvgPool2d}} AdaptiveAvgPool2d outputsize=(1,1)​(512/2048,1,1) → 1000 F C , s o f t m a x \xrightarrow[{{\text{1000}}}]{{FC,softmax}} FC,softmax 1000​输出1000个类别的概率
  4. 两种残差结构:左边残差结构BasicBlock()(用于ResNet18,34网络);右边残差结构Bottleneck(ResNet50,101,152网络)
  5. 不同层数的ResNet网络结构及详细说明(下面第二张图虚线表示通道数发生了变化,用1*1的卷积调整通道数,步长为2调整尺寸大小)
  6. pytorch官方源码分析
    源码,使用案例:net=torchvision.models.resnet18(num_classes=10)的分析:
    (1)调用resnet18函数传递默认参数pretrained=False, progress=True和**kwargs关键字参数(与下面调用的函数或类有关)给_resnet函数
    (2)调用_resnet函数传递位置参数block(BasicBlock),layers([2,2,2,2]),**kwargs给ResNet类(将ResNet类初始化为实例对象,由BasicBlock和[2,2,2,2]可知是构建resnet18模型)传递位置参数arch(‘resnet18’),pretrained,progress用来选择是否加载预训练参数(arch表示加载哪个resnet网络的预训练参数,当pretrained=True时,progress=True表示显示加载进度)
    (3)ResNet类:有默认参数num_classes=1000;传递位置参数block(BasicBlock),layers([2,2,2,2])给_make_layer(传进的参数BasicBlock即:选择类名BasicBlock(ResNet18,34)还是Bottleneck(ResNet50,101,152)来实例化搭建残差结构,重复[2,2,2,2]次)
    (4)BasicBlock和Bottleneck类:用来构建两种残存结构

    #代码不全,仅用于上述torchvision.models.resnet18()分析
    def resnet18(pretrained=False, progress=True, **kwargs):return _resnet('resnet18', BasicBlock, [2, 2, 2, 2], pretrained, progress, **kwargs)def _resnet(arch, block, layers, pretrained, progress, **kwargs):model = ResNet(block, layers, **kwargs)if pretrained:state_dict = load_state_dict_from_url(model_urls[arch],progress=progress)model.load_state_dict(state_dict)return modelclass ResNet(nn.Module):def __init__(self, block: Type[Union[BasicBlock, Bottleneck]], layers: List[int], num_classes: int = 1000,···self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=7, stride=2, padding=3, bias=False)self.bn1 = norm_layer(self.inplanes)self.relu = nn.ReLU(inplace=True)self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)"""block,layers传到_make_layer里。block选择类名BasicBlock(ResNet18,34)还是Bottleneck(ResNet50,101,152)来实例化搭建残差结构,重复layers[2,2,2,2]次。expansion在这两个残差结构里面定义,控制最后卷积通道数是512还是2048"""self.layer1 = self._make_layer(block, 64,  layers[0])self.layer2 = self._make_layer(block, 128, layers[1], stride=2)self.layer3 = self._make_layer(block, 256, layers[2], stride=2)self.layer4 = self._make_layer(block, 512, layers[3], stride=2)self.avgpool = nn.AdaptiveAvgPool2d((1, 1))self.fc = nn.Linear(512 * block.expansion, num_classes)def _make_layer(self,block,planes,blocks,stride,dilate) -> nn.Sequential:layers = []···layers.append(block(···))for _ in range(1, blocks):layers.append(block(···))return nn.Sequential(*layers)def _forward_impl(self, x: Tensor) -> Tensor:"""该部分即所有ResNet网络的主干:卷积,最大池化,4次残差结构,自适应平均池化,全连接及softmax"""conv1(x),bn1(x),relu(x)maxpool(x)layer1(x),layer2(x),layer3(x),layer4(x)avgpool(x)torch.flatten(x, 1),self.fc(x)return xdef forward(self, x: Tensor) -> Tensor:return self._forward_impl(x)class BasicBlock(nn.Module):#第一种残差结构BasicBlock(),用于ResNet18,34,两个3x3的卷积+shortcutexpansion: int = 1def forward(self, x: Tensor) -> Tensor:identity = xconv1(x),bn1(out),relu(out)conv2(out),bn2(out)out += identityout = self.relu(out)return out
    class Bottleneck(nn.Module):#第二种残差结构Bottleneck,用于ResNet50,101,152,3x3及1x1及3x3的卷积+shortcutexpansion: int = 4def forward(self, x: Tensor) -> Tensor:identity = xconv1(x),bn1(out),relu(out)conv2(x),bn2(out),relu(out)conv3(out),bn3(out)out += identityout = self.relu(out)return out
    

数据集及各个分类网络的结构:LeNet、AlexNet、VGG、ResNet(持续更新)相关推荐

  1. 计算机视觉:基于眼疾分类数据集iChallenge-PM图像分类经典模型剖析(LeNet,AlexNet,VGG,GoogLeNet,ResNet)

    计算机视觉:图像分类经典模型 LeNet AlexNet VGG GoogLeNet ResNet 图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉的核心,是物体检测.图像分割.物体跟 ...

  2. 【深度学习】MLP/LeNet/AlexNet/GoogLeNet/ResNet在三个不同数据集上的分类效果实践

    本文是深度学习课程的实验报告 使用了MLP/LeNet/AlexNet/GoogLeNet/ResNet五个深度神经网络模型结构和MNIST.Fashion MNIST.HWDB1三个不同的数据集,所 ...

  3. caffe总结(五)经典神经网络模型(LeNet , AlexNet , VGG , GoogLeNet)简介

    caffe总结(五) 一.LeNet 二.AlexNet ReLU 数据扩充 重叠池化 局部归一化(Local Response Normalization,简称LRN) Dropout 三.VGG ...

  4. 这就是神经网络 1:早期分类网络之LeNet-5、AlexNet、ZFNet、OverFeat、VGG

    概述 本系列文章计划介绍总结经典的神经网络结构,先介绍分类网络,后续会包括通用物体检测.语义分割,然后扩展到一些相对较细的领域如人脸检测.行人检测.行人重识别.姿态估计.文本检测等. 一些经典网络的年 ...

  5. PyTorch - FashionMNIST + LeNet / AlexNet / VGG / GooLeNet / NiN / ResNet / DenseNet

    文章目录 项目说明 数据集说明 - FashionMNIST 算法说明 - LeNet-5 LeNet-5 网络结构 代码实现 数据准备 下载数据集 查看数据 定义网络 训练 设置参数 训练方法 验证 ...

  6. LeNet,AlexNet,VGG,NiN,GoogLeNet,ResNet

    1.LeNet–早期成功的神经网络 LeNet 分为卷积层块和全连接层块两个部分,卷积层块⾥的基本单位是卷积层后接最⼤池化层. 使用卷积层来学习图片空间信息,通过池化层降低图片敏感度 使用全连接层来转 ...

  7. [数据集][VOC]高质量的目标检测数据集合集(持续更新)

    [1][数据集名称]数据集VOC正版消防灭火器数据集VOC格式-5156张 [数据集信息]数据集格式:Pascal VOC格式(仅包含jpg图片和对应的xml) 图数量(jpg文件个数 xml文件个数 ...

  8. VMware网络配置(网络连不上常见问题及解决方案,持续更新)

    如何使用Xshell连接VMware上的Linux虚拟机 前言 VM设置 启动虚拟机-在这儿 配置网络 其他常见问题 找不到VMnet1和VMnet8网络? 第一次访问上了但重启电脑后又访问不到了? ...

  9. scala基本语言结构以及函数算子(持续更新......)

    一.什么是scala scala是一种编程式语言,函数是一个独立的类,可以自由传输:是一种纯面向对象的语言,它具备java的一切特性,并在其基础上进行了扩展. 二.scala的基本数据类型 2.变量和 ...

最新文章

  1. mac 开机执行命令
  2. pytorch笔记:实例解析NLLLoss和CrossEntropyLoss
  3. va_list/va_start/va_arg/va_end深入分析
  4. Springboot配置fastjson开发
  5. css 横线_web前端入门到实战:CSS 搞怪的 text-decoration
  6. 关于鸿蒙DevEco Studio学习
  7. java 静态初始化数据_Java 静态数据初始化的示例代码
  8. ppt背景图片php,ppt背景图片怎么设置 ppt幻灯片制作视频
  9. java导出CSV文件
  10. ISA防火墙策略配置以及服务器的发布
  11. [Windows编程] 利用dxdiag获取用户机器硬件及OS信息
  12. Go语言判断接口的具体类型并进行类型转换
  13. 低代码到底是银弹,还是行业毒瘤?
  14. html5程序阅读题,20 个重要的 HTML5 面试题及答案
  15. python --安装pylab
  16. 盘点波卡生态潜力项目 | 跨链特性促进多赛道繁荣
  17. ArcGIS Enterprise部署介绍
  18. 拿了offer不去,会被HR拉黑吗?
  19. 怎么用生活照制作一寸证件照片
  20. 电击脖子还能抗疲劳?FDA在20年前就已批准这种疗法

热门文章

  1. 智慧城市下的 智慧厕所 包含哪些东西? 智慧公厕|智慧厕所引导系统
  2. Dva.js+umi入门案例(models层,services层,components层详细代码与解析)
  3. Antd Pro 路由转发redirect
  4. Unity中项目资源管理的一些经验与总结
  5. 关于程序员的学习方法的一些总结
  6. Tomcat 介绍与使用
  7. JavaScript 自动在表格前面增加序号
  8. 我为什么在美国也不给孩子喝牛奶?
  9. python怎么输入多维数组_Python的多维空数组赋值方法
  10. 杭州一公司开出20万月薪/320万年薪抢人!ChatGPT掀起AI热潮,AIGC人才被爆抢