记录神经网络中一些小知识点
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 感受野计算
- 感受野(receptive field)是卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。
- 下图中,map 3里1x1的区域对应map 2的receptive field是那个红色的7x7的区域,而map 2里7x7的区域对应于map 1的receptive field是蓝色的11x11的区域,所以map 3里1x1的区域对应map 1的receptive field是蓝色的11x11的区域。
- 计算方式
- 对于Convolution/Pooling layer:
ri=si⋅(ri+1−1)+ki
以上是关于记录神经网络中一些小知识点的主要内容,如果未能解决你的问题,请参考以下文章
- 对于Convolution/Pooling layer: