pytorch源码解读-2 vgg

参考原文:https://blog.csdn.net/sinat_33487968/article/details/83582299

附github中pytorch有的源码  


VGG网络结构

如图所示,VGG有多个版本,从A-E,D阶段为VGG-16,E阶段是VGG-19,VGG-16指的是conv+fc层,不包括max pooling层,VGG卷积都是same卷积,即卷积后输出图像的尺寸与输入一致。VGG 网络的贡献即使用小尺寸的卷积核(3×3),以及有规则的卷积-池化操作。

 下面看VGG (pytorch提供的)源码:


第一部分

首先是关于模型预训练的部分每一个模型都大同小异,因为VGG有多个版本所以不同的版本有不同的预训练模型下载地址。可以看看https://blog.csdn.net/sinat_33487968/article/details/83582299里的解释。

重点关注模型部分。VGG这个类里面的self.features就代表了卷积的部分,而self.classifer就是后面的全连接部分。因为每一个VGG的版本前面的卷积层数不同(其实卷积核的大小论文里面也是有不同,只是这里的torchvision为了简便将所有的卷积核大小都定义为3。)foward函数就是网络前向传播的过程,而_initialize_weights函数是对网络的一些权重进行初始化,初始化的方式有很多种,可以参考pytorch官网上面torch.nn.init部分https://pytorch.org/docs/stable/nn.html#torch-nn-init

看到有一个方法是kaiming大神在Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification中提出的。有兴趣的可以去看。

VGG 类

这么多重复的卷积不可能一个一个写。所以使用了一个make layers的函数for循环产生卷积层。


此函数用于循环生成卷积池化层


VGG版本

这里的cfg就是我们对于每个版本的VGG卷积层的定义,其中'M'代表了maxpooling,数字代表了卷积核的数量。前面的字母可以和上图的论文上面截取的图片相匹配

VGG16

其中有一句:model = VGG(make_layers(cfg['D']), **kwargs)

VGG是定义的类,make_layers是在类中定义的函数,即类可以调用类之外调用的函数,这个函数也就是类传入的参数。make_layers(cfg['D'])即为features。

VGG全部源码见 /home/wangqi/PycharmProjects/pytorch_learning/自定义模型/VGG_yuanma.py


关于参数的初始化,没有也不会影响训练。而VGG网络中的参数初始化函数,只要是CNN 都可以用这种方法进行初始化。在__init__里面调用即可。

附上一张VGG16每一层的输出情况:

VGG网络输出
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 01 相识20年的老友,给我讲这样一件事。 昨天晚上,吃过晚饭,他一如既往地躺在沙发上刷手机看新闻,妻子收拾完碗筷...
    原子妈咪阅读 1,324评论 0 0
  • 本游戏郑重承诺以保护使用其交互性产品和服务之用户的隐私。以下声明旨在披露与本游戏网页有关的隐私政策: 本游戏收集哪...
    反射阅读 1,504评论 0 0
  • 这周拖拖拉拉开始阅读这本书,之前是看了后面的练习题,了解了这本书大致要提高我的哪些能力,同时带着我的问题开...
    粥子_袁锦州阅读 2,454评论 0 0

友情链接更多精彩内容