CNN的超参数 & 宽卷积和窄卷积的理解及tensorflow中的实现
2017-01-01 10:17
513 查看
窄卷积 vs 宽卷积
在上文中解释卷积运算的时候,我忽略了如何使用滤波器的一个小细节。在矩阵的中部使用3x3的滤波器没有问题,在矩阵的边缘该怎么办呢?左上角的元素没有顶部和左侧相邻的元素,该如何滤波呢?解决的办法是采用补零法(zero-padding)。所有落在矩阵范围之外的元素值都默认为0。这样就可以对输入矩阵的每一个元素做滤波了,输出一个同样大小或是更大的矩阵。补零法又被称为是宽卷积,不使用补零的方法则被称为窄卷积。1D的例子如图所示:
当滤波器长度相对输入向量的长度较大时,你会发现宽卷积很有用,或者说很有必要。
所以,在NLP中,如果滤波器的长度相对于输入向量的长度比较大
,要记住使用宽卷积。在上图中,窄卷积输出的长度是 (7-5)+1=3,宽卷积输出的长度是(7+2*4-5)+1=11。
一般形式为:
在tensorflow的实现中,conv2d的padding=‘SAME',默认的就是宽卷积的方式,会进行补零。padding = ’VALID'就是窄卷积的方式。
在上文中解释卷积运算的时候,我忽略了如何使用滤波器的一个小细节。在矩阵的中部使用3x3的滤波器没有问题,在矩阵的边缘该怎么办呢?左上角的元素没有顶部和左侧相邻的元素,该如何滤波呢?解决的办法是采用补零法(zero-padding)。所有落在矩阵范围之外的元素值都默认为0。这样就可以对输入矩阵的每一个元素做滤波了,输出一个同样大小或是更大的矩阵。补零法又被称为是宽卷积,不使用补零的方法则被称为窄卷积。1D的例子如图所示:
当滤波器长度相对输入向量的长度较大时,你会发现宽卷积很有用,或者说很有必要。
所以,在NLP中,如果滤波器的长度相对于输入向量的长度比较大
,要记住使用宽卷积。在上图中,窄卷积输出的长度是 (7-5)+1=3,宽卷积输出的长度是(7+2*4-5)+1=11。
一般形式为:
在tensorflow的实现中,conv2d的padding=‘SAME',默认的就是宽卷积的方式,会进行补零。padding = ’VALID'就是窄卷积的方式。
相关文章推荐
- Faster rcnn test浮点运算次数(卷积实现过程,Faster rcnn总体结构和参数)
- 利用Tensorflow和matplotlib直观理解CNN的卷积层与池化层
- 卷积神经网络CNN:Tensorflow实现(以及对卷积特征的可视化)
- Tensorflow的MNIST进阶教程CNN网络参数理解
- tensorflow训练自己的数据集实现CNN图像分类2(保存模型&测试单张图片)
- CNN中的卷积核及TensorFlow中卷积的各种实现
- Tensorflow中的CNN layer参数(即用tensorflow框架实现简单CNN)
- 基于tensorflow实现的简单卷积网络(CNN)
- Java Thread&Concurrency(2): 深入理解ConcurrentSkipListMap实现原理
- 搭建MVC框架,实现在地址栏传递参数index.php?c=news&a=add后,输出"这里是新闻添加"
- ※C++随笔※=>☆C++基础☆=>※№C++不定参数的处理实现LOG
- 【转】深入理解C++的动态绑定和静态绑定 & 不要重定义虚函数中的默认参数
- 通过操作指针,与指针做函数参数'实现字串在主串中出现的次数,然后将出现的部分按照要求进行替换
- Java Thread&Concurrency(9): 深入理解StampedLock及其实现原理
- Java Thread&Concurrency(13): 深入理解ConcurrentLinkedQueue及其实现原理
- Java Thread&Concurrency(10): 深入理解ThreadLocal及其实现原理
- Java Thread&Concurrency(11): 深入理解ThreadPoolExecutor及其实现原理
- Java Thread&Concurrency(5): 深入理解Phaser实现原理
- Java Thread&Concurrency(4): 深入理解Exchanger实现原理
- Deep Learning(深度学习)学习笔记整理系列之LeNet-5卷积参数个人理解