美文网首页
pytorch源码解读-2 vgg

pytorch源码解读-2 vgg

作者: 深度学习努力中 | 来源:发表于2019-01-10 11:04 被阅读0次

    参考原文: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网络输出

    相关文章

      网友评论

          本文标题:pytorch源码解读-2 vgg

          本文链接:https://www.haomeiwen.com/subject/rprnrqtx.html