TensorFlow中CNN的两种padding方式“SAME”和“VALID”
来源:互联网 发布:软件下载官方网站排行 编辑:程序博客网 时间:2024/06/05 16:07
转载请标明出处:http://blog.csdn.net/wuzqchom/article/details/74785643
在用tensorflow写CNN的时候,调用卷积核api的时候,会有填padding方式的参数,找到源码中的函数定义如下(max pooling也是一样):
def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None,
data_format=None, name=None)
源码中对于padding参数的说明如下:
padding: A
string
from:"SAME", "VALID"
.
The type of padding algorithm to use.
说了padding可以用“SAME”和“VALID”两种方式,但是对于这两种方式具体是什么并没有多加说明。
这里用Stack Overflow中的一份代码来简单说明一下,代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
最后输出的结果为:
(1, 1, 1, 1)
(1, 1, 2, 1)
可以看出“SAME”的填充方式是比“VALID”的填充方式多了一列。
让我们来看看变量x是一个2x3的矩阵,max pooling窗口为2x2,两个维度的strides=2。
第一次由于窗口可以覆盖(橙色区域做max pool操作),没什么问题,如下:
接下来就是“SAME”和“VALID”的区别所在,由于步长为2,当向右滑动两步之后“VALID”发现余下的窗口不到2x2所以就把第三列直接去了,而“SAME”并不会把多出的一列丢弃,但是只有一列了不够2x2怎么办?填充!
如上图所示,“SAME”会增加第四列以保证可以达到2x2,但为了不影响原来的图像像素信息,一般会议0来作为填充。(这里使用表格的形式展示,markdown不太好控制格式,明白意思就行),这就不难理解不同的padding方式输出的形状会有所不同了。
在CNN用在文本中时,一般卷积层设置卷积核的大小为n×k,其中k为输入向量的维度(即[n,k,input_channel_num,output_channel_num]),这时候我们就需要选择“VALID”填充方式,这时候窗口仅仅是沿着一个维度扫描而不是两个维度。可以理解为统计语言模型当中的N-gram。
我们设计网络结构时需要设置输入输出的shape,源码nn_ops.py中的convolution函数和pool函数给出的计算公式如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
dilation_rate为一个可选的参数,默认为1,这里我们可以先不管它。
整理一下,对于“VALID”,输出的形状计算如下:
对于“SAME”,输出的形状计算如下:
其中,
- TensorFlow中CNN的两种padding方式“SAME”和“VALID”
- TensorFlow中CNN的两种padding方式“SAME”和“VALID”
- Tensorflow中padding的两种类型SAME和VALID
- Tensorflow中padding的两种类型SAME和VALID
- Tensorflow中padding的两种类型SAME和VALID
- Tensorflow中padding的两种类型SAME和VALID
- Tensorflow中padding的两种类型SAME和VALID
- Tensorflow中padding的两种类型SAME和VALID
- Tensorflow里的padding操作(VALID和SAME两种)
- tensorflow:SAME VALID padding
- [AI, 深度学习] tensorflow中padding="SAME"和"VALID"的区别
- 卷积神经网络中same padding 和 valid padding
- tensorflow中padding方式理解:same与valide
- tensorflow中padding的两种类型对比
- tensorflow_conv2d_max_pool卷积池化padding参数为SAME和VALID的区别
- tf的“SAME”和“VALID”
- tensorflow中nn的padding
- valid 与 same的卷积方式
- Java NIO 详解
- bzoj1411
- 在一个普通的html文件中引入es6
- 判断 SharedPreferences 是否是第一次登录
- mysql、oracle、sqlserver根据对应的表查询表中的所有字段名称、类型、别名、长度等信息
- TensorFlow中CNN的两种padding方式“SAME”和“VALID”
- Spring使用Cache、整合Ehcache
- Arrays.asList方法
- 『 Spark 』6. 深入研究 spark 运行原理之 job, stage, task
- 关于go的第三方包go-sqlite3的安装
- erlang开发的开源项目
- Tomcat配置图片服务器
- C/C++ -- 内存泄露和野指针
- 棋盘问题(POJ-1321)