关于 Network-in-network理解和实现

来源:互联网 发布:rpcs3 安装游戏数据卡 编辑:程序博客网 时间:2024/06/10 17:54

NIN论文地址

1.出发点:增强模型在其感知野内的辨别能力,通常是由卷积滤波器(一个通用线性模型(GLM))提取各个抽象特征,当这些被提取的特征是线性的,卷积滤波器是够用的,但这显然不符合事实,比如我们要提取 某个特征,于是我就用了一大堆的滤波器,把所有可能的提取出来,这样就可以把我想要提取的特征也覆盖到,然而这样存在一个缺点,那就是网络太恐怖了,参数 太多了。因此作者用一个通用的函数逼近器(mlp)来进行特征提取,通过在每个感知野中加入更加复杂的结构来进行数据的抽象。(加入非线性部分)
论文中图如下:
这里写图片描述

这里写图片描述
   由图可知,mlpconv=convolution+mlp(图中为2层的mlp)。
   在实现上,mlpconv=convolution+1×1convolution+1×1convolution(2层的mlp)
个人认为实现NIN就是在原来的卷积后再加上1*1的卷积即可,如下图,有三个NIN层,那么第一个NIN的实现应该是conv1[3*3],(kernal)
conv2[1*1],conv3[1*1]这种。
这里写图片描述
2.Global Average Pooling
    提出了全局平均池化来代替全连接层,且在Global Average Pooling(gap)前通道数(feature maps)已经减少到分类的个数,gap直接对每个feature map求均值,假设输入是[N,10,10,100]经过gap后为[N,100].
实现

def GlobalAvgPooling(x, data_format='NHWC'):    """    Global average pooling as in the paper `Network In Network    <http://arxiv.org/abs/1312.4400>`_.    Args:        x (tf.Tensor): a NHWC tensor.    Returns:        tf.Tensor: a NC tensor named ``output``.    """    assert x.shape.ndims == 4    assert data_format in ['NHWC', 'NCHW']    axis = [1, 2] if data_format == 'NHWC' else [2, 3]    return tf.reduce_mean(x, axis, name='output')

3.4. 1×1卷积的作用
以下内容摘抄自:http://www.caffecn.cn/?/question/136
这位博客作者写的分析很好,我直接拿来用了
问:发现很多网络使用了1X1卷积核,这能起到什么作用呢?另外我一直觉得,1X1卷积核就是对输入的一个比例缩放,因为1X1卷积核只有一个参数,这个核在输入上滑动,就相当于给输入数据乘以一个系数。不知道我理解的是否正确
答1:
对于单通道的feature map和单个卷积核之间的卷积来说,题主的理解是对的,CNN里的卷积大都是多通道的feature map和多通道的卷积核之间的操作(输入的多通道的feature map和一组卷积核做卷积求和得到一个输出的feature map),如果使用1x1的卷积核,这个操作实现的就是多个feature map的线性组合,可以实现feature map在通道个数上的变化。接在普通的卷积层的后面,配合激活函数,就可以实现network in network的结构了(本内容作者仅授权给CaffeCN社区(caffecn.cn)使用,如需转载请附上内容来源说明。)
答2:
我来说说我的理解,我认为1×1的卷积大概有两个方面的作用吧:
1. 实现跨通道的交互和信息整合
2. 进行卷积核通道数的降维和升维

原创粉丝点击