正文1547个字,1张图,预计阅读时间5分钟。
最近拜读了Christian Szegedy的Rethinking the Inception Architecture for Computer Vision,让我开了许多脑洞。不得不承认,现在的深度学习发展太快了,稍不留神,1年前的许多方法都过时了。上面这篇文章应该是GoogLeNet的延伸吧,Christian Szegedy在发布GoogLeNet之后,又完善了网络一下(变得更复杂),然后写了上面的文章。
可能是我读论文读的太少,我第一次在Inception Architecture中见到了非对称卷积。什么意思呢?就是平常我们看到的卷积核一般都是 1x1、3x3、5x5 大小,Inception Architecture中用的卷积核是 7x1、1x7,先不提Inception Architecture的网络结构有多奇葩,光这个非对称kernel就很诡异了。
于是,为了有个形象的理解,我就写了个小小的测试程序:
import tensorflow as tf
x = tf.Variable(tf.ones([1, 4, 4, 1]))
w = tf.Variable(tf.ones([3, 1, 1, 1]))
output = tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init
对比一下输入和输出(我把4维向量2维化了,方便理解):
w = [1 1 1] # 非对称卷积核
x = [[1 1 1 1], output = [[2 3 3 2], # 输入和输出
[1 1 1 1], [2 3 3 2],
[1 1 1 1], [2 3 3 2],
[1 1 1 1]] [2 3 3 2]
有了上面的运算结果,就一目了然了,但采用这种非对称卷积的目的何在?原因总结如下:
1、先进行 n×1 卷积再进行 1×n 卷积,与直接进行 n×n 卷积的结果是等价的。原文如下:
In theory, we could go even further and argue that one can replace any n × n convolution by a 1 × n convolution followed by a n × 1 convolution
2、非对称卷积能够降低运算量,这个很好理解吧,原来是 n×n 次乘法,改了以后,变成了 2×n 次乘法了,n越大,运算量减少的越多,原文如下:
the computational cost saving increases dramatically as n grows.
3、虽然可以降低运算量,但这种方法不是哪儿都适用的,非对称卷积在图片大小介于12×12到20×20大小之间的时候,效果比较好,具体原因未知。。。原文如下:
In practice, we have found that employing this factorization does not work well on early layers, but it gives very good results on medium grid-sizes (On m×m feature maps, where m ranges between 12 and 20).
原文链接:https://www.jianshu.com/p/0d04cb4b8cd7
查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:
www.leadai.org
请关注人工智能LeadAI公众号,查看更多专业文章
大家都在看
LSTM模型在问答系统中的应用
基于TensorFlow的神经网络解决用户流失概览问题
最全常见算法工程师面试题目整理(一)
最全常见算法工程师面试题目整理(二)
TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络
装饰器 | Python高级编程
今天不如来复习下Python基础