使用更小卷积核的作用
2017-10-22 17:27
295 查看
使用更小的卷积核是当前在保证网络精度的情况下,减少参数的趋势之一,在VGG16中,使用了3个3*3卷积核来代替7*7卷积核,使用了2个3*3卷积核来代替5*5卷积核,这样做的主要目的是在保证具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果。
以下简单地说明一下小卷积(3*3)对于5×5网络感知野相同的替代性。
![](https://img-blog.csdn.net/20171022172015402?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGluZ3p1aHVpdG91/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
关于3个3×3卷积核对于7× 7 卷积的替代性思考方式同上。
接下来说明以下减少参数的作用。
对于两个3*3卷积核,所用的参数总量为2*(3*3)*channels, 对于5*5卷积核为5*5*channels, 因此可以显著地减少参数的数量。
下面是7*7的用三个3*3卷积核替代的情况
![](https://img-blog.csdn.net/20171022172200839?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGluZ3p1aHVpdG91/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
假设输入的图片大小为100*100*3,卷积操作不改变大小(padding=same)。先看用128个7*7*3的核进行卷积操作,需要100*100*7*7*3*128次乘法操作然后我们用3层3*3卷积代替上面的7*7卷积,每层仍取128个核,需要100*100*3*3*3*128*3次乘法操作,约掉相同部分,分别剩下7*7=49和3*3*3=27.显然,用三层3*3代替一层7*7可以减少近一半的计算量。
以下简单地说明一下小卷积(3*3)对于5×5网络感知野相同的替代性。
关于3个3×3卷积核对于7× 7 卷积的替代性思考方式同上。
接下来说明以下减少参数的作用。
对于两个3*3卷积核,所用的参数总量为2*(3*3)*channels, 对于5*5卷积核为5*5*channels, 因此可以显著地减少参数的数量。
下面是7*7的用三个3*3卷积核替代的情况
7*7的卷积核,不是只需要一次加权求和就成了1*1的输出了么。3*3的卷积核,先过滤成5*5,再用3*3卷积核就成了3*3,再一次,就成了1*1。3*3的卷积核只有9个参数,卷积3次,也就27个参数。而7*7的卷积核是49个参数,我承认参数变少了。但在加权求和的过程中,显然前者运算步骤更多。参数少了,运算步骤却多了,我的疑问就在这。
假设输入的图片大小为100*100*3,卷积操作不改变大小(padding=same)。先看用128个7*7*3的核进行卷积操作,需要100*100*7*7*3*128次乘法操作然后我们用3层3*3卷积代替上面的7*7卷积,每层仍取128个核,需要100*100*3*3*3*128*3次乘法操作,约掉相同部分,分别剩下7*7=49和3*3*3=27.显然,用三层3*3代替一层7*7可以减少近一半的计算量。
相关文章推荐
- Android:LayoutInflater作用及使用(转)
- paip.Java Annotation注解的作用and 使用
- C++中Static作用和使用方法
- PreTranslateMessage作用和使用方法
- mysql中OPTIMIZE TABLE的作用及使用
- C++命名空间namespace的作用和使用解析
- Java 回调函数作用和使用场景
- [转]什么是C++虚函数、虚函数的作用和使用方法
- #ifdef-#endif的作用及其使用技巧
- PreTranslateMessage作用和使用方法
- .NET Attribute(特性)的作用与用法——几句话解决Attribute使用的困惑
- ThreadLocal的作用与使用
- 使用make编译源码,使用-j 参数的作用
- JAVA 注解的几大作用及使用方法详解【转】
- 对Hibernate Formula作用的全析及如何在JPA中使用它
- Python的模块,模块的使用、安装,别名,作用域等概念
- 对象序列化(串行化)的作用、使用
- PreTranslateMessage作用和使用方法(转载)
- QTime的使用 计时作用
- C++中Static作用和使用方法