卷积神经网络[CNN]笔记(二)—— 全连接层[Fully-Connected Layer]与卷积层[Convolutional Layer]的转换

  这是卷积神经网络笔记第二篇,完整的笔记目录可以点击这里查看。
  
  全连接层(Fully-connected Layer)中的神经元与前一层中的所有输出值都有完全连接,就像在常规神经网络中看到的那样。因此,它们的激活可以通过矩阵乘法和增加偏移来计算。下面详细讨论一下怎么将全连接层(FC层)转换为一般的卷积层(CONV层)。
  值得注意的是,FC层和CONV层之间的唯一区别是CONV层中的神经元仅连接到输入中的局部区域,并且CONV层中的许多神经元共享参数。但是,这两种层的神经元都是通过点积进行计算的,所以它们的函数形式是相同的。因此,可以在FC层和CONV层之间进行转换:
  对于任何一个CONV层,都可以转化为一个实现相同计算功能的FC层,只是转换以后,其权重矩阵将是一个大部分数据为0的大的矩阵。
  相反,任何FC层都可以转换为CONV层。例如,K=4096的FC层正在处理大小为7×7×512的输入数据,可以等效地表示为F=7,P=0,S=1,K=4096的CONV层。换句话说,我们将过滤器大小设置为输入的大小,因此输出将仅为1×1×4096,因为只有一个深度列“适合”整个输入,从而得到与原始FC层相同的结果。
  在这两种转换中,将FC层转换为CONV层在实践中特别有用。考虑一个ConvNet架构(AlexNet),它获取一个224x224x3的图像,然后使用一系列CONV层和池化层将图像减少到一个大小为7x7x512的激活层。为了达到这一目的,AlexNet使用两个4096大小的FC层,最后一个FC层使用1000个神经元来计算class的分数。我们可以将这三个FC层都转换为CONV层:

  • 将第一个处理数据大小为[7x7x512]的FC层替换为使用过滤器大小F=7的CONV层,从而得到输出[1x1x4096]。
  • 用CONV层替换第二个FC层,CONV层使用的过滤器大小F=1,输出为[1x1x4096]
  • 同样地,用F=1替换最后一个FC层,给出最终输出[1x1x1000]

  在实践中,这些转换中的每一个都可能涉及将每个FC层中的权重矩阵W变形(reshape)到CONV层滤波器中。事实证明,这种转换使我们能够在一次前向传递中,非常有效地将原始ConvNet“滑动”到更大图像中的许多空间位置。
  这种转换技巧通常用于实践中,以获得更好的计算性能。例如,通常先调整图像大小使其更大,然后使用转换的ConvNet在许多空间位置评估class分数,最后求出平均的class分数。
  一个Net Surgery上的IPython Notebook用代码(使用Caffe)展示了如何在实践中执行FC层到CONV层的转换。



*本博客翻译总结自CS231n课程作业网站,该网站需要翻墙才能访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值