VGG 最大的特点就是通过比较彻底地采用 3x3 尺寸的卷积核来堆叠神经网络,这样也加深整个神经网络的深度。这两个重要的改变对于人们重新定义卷积神经网络模型架构也有不小的帮助,至少证明使用更小的卷积核并且增加卷积神经网络的深度,可以更有效地提升模型的性能。

1.VGG16结构图

 

2.VGG16总参数

VGG16总参数量是138M,具体如下:
第1层:1792 = 3*3*3*64+64
第2层:36928 = 3*3*64*64+64
第3层:73856 = 3*3*64*128+128
第4层:147584 = 3*3*128*128+128
第5层:295168 = 3*3*128*256+256
第6层:590080 = 3*3*256*256+256
第7层:590080 = 3*3*256*256+256
第8层:1180160 = 3*3*256*512+512
第9层:2359808 = 3*3*512*512+512
第10层:2359808 = 3*3*512*512+512
第11层:2359808 = 3*3*512*512+512
第12层:2359808 = 3*3*512*512+512
第13层:2359808 = 3*3*512*512+512
第14层:102764544 = 7*7*512*4096+4096
第15层:16781312 = 4096*4096+4096
第16层:4097000 = 4096*1000+1000

3.VGG总结

1、VGG16相比AlexNet的一个改进是采用连续的3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5)

2、加深结构都使用ReLU激活函数:提升非线性变化的能力
3、VGG16 全部采用3*3卷积核,步长统一为1,Padding统一为1,和2*2最大池化核,步长为2,Padding统一为0
4、VGG19比VGG16的区别在于多了3个卷积层,其它完全一样

5、VGG16基本是AlexNet(AlexNet是8层,包括5个卷积层和3个全连接层)的加强版,深度上是其2倍,参数量大小也是两倍多。

4.VGG创新点

1。使用3x3卷积核替代7x7卷积核的好处?

2 个 3x3 的卷积核叠加,它们的感受野等同于 1 个 5x5 的卷积核,3 个叠加后,它们的感受野等同于 1 个 7x7 的效果。

由于感受野相同,3个3x3的卷积,使用了3个非线性激活函数,增加了非线性表达能力,从而可以提供更复杂的模式学习。

使用3x3卷积核可以减少参数,假设现在有 3 层 3x3 卷积核堆叠的卷积层,输出和输出通道数都是C,那么它的参数总数是 3x(3x3xCxC)=27xCxC 。同样和它感受野大小一样的一个卷积层,卷积核是 7x7 的尺寸,假如输出和输出通道数都是C,那么它的参数总数就是 7x7xCxC=49xCxC。而且通过上述方法网络层数还加深了。三层3x3的卷积核堆叠参数量比一层7x7的卷积核参数链还要少。总的来说,使用3x3卷积核堆叠的形式,既增加了网络层数又减少了参数量。

2。多少个3x3的卷积核可以替代原来11x11的卷积核?

(11-1)/2=5,故5个3x3的卷积核可以替代原来11x11的卷积核,即n-11+1=n+(-3+1)*5

3。VGG的C网络结构使用了1x1卷积核,1x1卷积核的主要好处?

使用多个1x1卷积核,在保持feature map 尺寸不变(即不损失分辨率)的前提下,可以大幅增加非线性表达能力,把网络做得很deep。

进行卷积核通道数的降维和升维。

1x1卷积相当于线性变换,非线性激活函数起到非线性作用。

总结就是:1x1 卷积核的好处是不改变感受野的情况下,进行升维和降维,同时也加深了网络的深度

5.代码

import torch
import torch.nn as nn
class VGG16(nn.Module):def __init__(self, num_classes=10):super(VGG16, self).__init__()self.features = nn.Sequential(#1nn.Conv2d(3,64,kernel_size=3,padding=1),nn.BatchNorm2d(64),nn.ReLU(True),#2nn.Conv2d(64,64,kernel_size=3,padding=1),nn.BatchNorm2d(64),nn.ReLU(True),nn.MaxPool2d(kernel_size=2,stride=2),#3nn.Conv2d(64,128,kernel_size=3,padding=1),nn.BatchNorm2d(128),nn.ReLU(True),#4nn.Conv2d(128,128,kernel_size=3,padding=1),nn.BatchNorm2d(128),nn.ReLU(True),nn.MaxPool2d(kernel_size=2,stride=2),#5nn.Conv2d(128,256,kernel_size=3,padding=1),nn.BatchNorm2d(256),nn.ReLU(True),#6nn.Conv2d(256,256,kernel_size=3,padding=1),nn.BatchNorm2d(256),nn.ReLU(True),#7nn.Conv2d(256,256,kernel_size=3,padding=1),nn.BatchNorm2d(256),nn.ReLU(True),nn.MaxPool2d(kernel_size=2,stride=2),#8nn.Conv2d(256,512,kernel_size=3,padding=1),nn.BatchNorm2d(512),nn.ReLU(True),#9nn.Conv2d(512,512,kernel_size=3,padding=1),nn.BatchNorm2d(512),nn.ReLU(True),#10nn.Conv2d(512,512,kernel_size=3,padding=1),nn.BatchNorm2d(512),nn.ReLU(True),nn.MaxPool2d(kernel_size=2,stride=2),#11nn.Conv2d(512,512,kernel_size=3,padding=1),nn.BatchNorm2d(512),nn.ReLU(True),#12nn.Conv2d(512,512,kernel_size=3,padding=1),nn.BatchNorm2d(512),nn.ReLU(True),#13nn.Conv2d(512,512,kernel_size=3,padding=1),nn.BatchNorm2d(512),nn.ReLU(True),nn.MaxPool2d(kernel_size=2,stride=2),nn.AvgPool2d(kernel_size=1,stride=1),)self.classifier = nn.Sequential(#14nn.Linear(512,4096),nn.ReLU(True),nn.Dropout(),#15nn.Linear(4096, 4096),nn.ReLU(True),nn.Dropout(),#16nn.Linear(4096,num_classes),)#self.classifier = nn.Linear(512, 10)def forward(self, x):out = self.features(x)#        print(out.shape)out = out.view(out.size(0), -1)#        print(out.shape)out = self.classifier(out)#        print(out.shape)return out

VGG16网络模型的原理与实现相关推荐

  1. vgg16网络模型的学习理解

    Vgg16网络模型一些注意和理解(可能学习的不是非常的扎实,如果有什么问题向往指出) 为什么使用3个3*3的卷积核代替一个7*7的卷积核? 保证在有相同感知野的条件下,提升了网络的深度,在一定程度上提 ...

  2. VGGNet 论文精度,并解析 VGG-16 网络模型结构

    <VERY DEEP CONVOLUTIONAL NETWORKSFOR LARGE-SCALE IMAGE RECOGNITION> <大规模图像识别的深度卷积网络> 论文地 ...

  3. ResNet(残差网络模型)原理解读-包括residual block与BN原理介绍

    <Deep Residual Learning for Image Recognition> <Identity Mappings in Deep Residual Networks ...

  4. VGG-16网络模型可视化

    利用pytorch import torch import torch.nn as nn VGG_types = {"VGG11": [64, "M", 128 ...

  5. 卷积神经网络模型解读汇总——LeNet5,AlexNet、ZFNet、VGG16、GoogLeNet和ResNet

      在我的个人博客上一篇博文中分析了卷积神经网络的结构与相关算法,知道了这些基本原理之后.这篇博文主要介绍在卷积神经网络的发展历程中一些经典的网络模型. LeNet5   LeCun等将BP算法应用到 ...

  6. Pytorch 网络模型的保存与读取

    保存方式一: 例如:对 vgg16 网络模型进行保存,模型如下 模型保存使用 torch.save() 方法 torch.save(模型, "文件名.h5") # 保存 模型结构 ...

  7. 十五、修改VGG16网络来适应自己的需求

    一.VGG-16 VGG-16神经网络是所训练的数据集为ImageNet ImageNet数据集中验证集和测试集一万五千张,有一千个类别 二.加载VGG-16神经网络模型 VGG16模型使用说明 to ...

  8. 【云驻共创】华为云云原生之Kubernetes网络架构原理深度剖析(上)

    文章目录 前言 一.Kubernetes诞生背景 1.云原生的概念 2.云原生架构 3.Kubernetes(k8s) 二.Kubernetes基本网络模型剖析 1.概念厘清 1.1 二层桥接 VS ...

  9. 细粒度分类 CUB_200_2011 vgg16 (数字图像处理)

    细粒度分类 CUB_200_2011 vgg16 1.细粒度分类 2.CNN(卷积神经网络) 3.vgg16网络模型 4.数据集 CUB_200_2011 5.基于卷积神经网络(vgg16网络模型)对 ...

最新文章

  1. 提高Excel中VBA效率的四种方法
  2. 自学python转行-强烈建议|转行Python最好看一下这篇文章
  3. 《深入理解Java虚拟机》笔记5——类加载机制与字节码执行引擎
  4. Linux:shell脚本中实现变量自增的几种方式
  5. 成功解决NameError: name 'file' is not defined
  6. 27.怎样在Swift中声明typedef?
  7. MQTT协议笔记之mqtt.io项目TCP协议支持
  8. ldap seach java_从LDAP(Java)检索信息
  9. [转载]httpClient.execute抛Connection to refused异常问题
  10. [HNOI2019]校园旅行
  11. 媒体查询 200304
  12. fiddler实现后端接口 mock(不需要修改开发代码)
  13. Atitit 面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)的区别和联系
  14. 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)
  15. If you are using Gradle, make sure that your current variant is debuggable.
  16. android 触摸事件流程。
  17. QQ客户端管理聊天记录漫游功能 | 解决经常弹窗消息漫游安全验证,QQ服务独立密码的问题
  18. java获取法定节假日_java 获取n个工作日后的日期(包含法定节假日、双休日、节后补班)...
  19. java data mining_“JDM”是“Java Data Mining”的缩写,意思是“Java数据挖掘”
  20. 『iOS开发』iOS 签名机制

热门文章

  1. 俞敏洪:我让女儿主动学习的秘密,做
  2. 17 个可以实现高效工作与在线赚钱的 AI 工具网站
  3. Python pprint | 超级好用的Python库,漂亮的打印,让json数据提取体验更好
  4. 补码一位乘法器设计(运算器设计)
  5. 名编辑电子杂志大师教程 | 如何设置电子书微信分享的标题,小图标,描述?
  6. 【Java笔记】---Week06 常用类、正则表达式与集合
  7. chrome浏览器安装失败,已解决(方便)
  8. Spring之FactoryBean详解
  9. C++ AMP异构并行编程解析
  10. mysql 查询schema_mysql数据库schema是什么