记录神经网络中一些小知识点

Posted 时光杂货店

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录神经网络中一些小知识点相关的知识,希望对你有一定的参考价值。

记录神经网络中一些小知识点

作者:xg123321123

出处:http://blog.csdn.net/xg123321123/article/details/52854883

声明:版权所有,转载请联系作者并注明出处

1 Caffe中的blob维度

  • Caffe中的blob具有4个维度,分别是num,channel,width和height;
  • 其中我们在定义各个网络层时,常用到的一个参数numout,就是指定的channel;
  • 比如说,维度为1*3*5*5的数据输入网络(即每次输入一张5*5大小的3通道图),经过一个stride为2,pad为1,kernel为2,numout为2的卷积层后,维度就变成了1*2*3*3;
    • 假如输入有n个通道,计算时,caffe就会对应产生n个filter来与之相乘,然后将得到的这n个乘积加起来,这个计算过程最后产生一个channel;
    • 假如输出的numout为m,就会有m个上述计算过程;
    • 可参考下图
  • 我们经常能看到在一些网络里,使用1*1kernel大小的卷积层来降维,就是这个原因;googlenet里也用来减少网络参数。
    这里写图片描述

2 1*1卷积核的作用

  • 实现跨通道的交互和信息整合。
    • CNN中的卷积大都是多通道的feature map和多通道的卷积核之间的操作(如上面第一点所说,输入多通道的feature map和对应数目的卷积核做卷积求和,然后输出1个通道的feature map);
    • 如果使用1x1的卷积核,这个操作实现的就是多个feature map的线性组合,可以实现feature map在通道个数上的变化;
    • 当接在普通的卷积层的后面,配合激活函数,就可以实现network in network的结构了。
  • 进行卷积核通道数的降维和升维。

    • GoogLeNet中,对于每一个Inception模块(如下图),原始模块是a图,b图中是加入了1×1卷积进行降维的。
    • 以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是a图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而b图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。
    • GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)。
      这里写图片描述
      这里写图片描述

    • ResNet同样也利用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构。
      这里写图片描述

  • 另外,最近在Titan X上训练fcn,迭代了1500次后,内存就爆炸了。

    • 考虑应该是网络连接数太多了,将caffemodel保存下来,发现有1.2G;
    • finetuning时,如果载入的模型太大,可以考虑迭代小数目次数后,就存一下caffemodel,然后载入新保存的caffemodel来finetuning,因为weight也很耗显存,如果finetuning只利用到里面的几层,又载入了全卷积这些连接数庞大的层,不划算,故建议尽早重载model;
    • 打算尝试1*1卷积核,看能不能把网络连接数降到可接受范围内。

3 感受野计算