CNN中的padding
来源:互联网 发布:全景图拼合软件 编辑:程序博客网 时间:2024/06/07 02:38
在CNN
中,卷积和池化是一种很常见的操作,一般认为通过卷积和池化可以降低输入图像的维度,也可以达到一定的旋转不变性和平移不变性;
而在这种操作过程中,图像(或者特征图)的尺寸是怎么变化的呢?
本文主要描述TensorFlow
中,使用不同方式做填充后(padding = 'SAME' or 'VALID'
)的tensor
的size
变化。
Input Shape
对于输入,tf
中一般用一个4-D
的tensor
来表示,其shape
为[batch_size, in_width, in_height, channels]
,卷积核一般也用一个4-D
的tensor
来表示,其shape
为[filter_width, filter_height, input_channels, output_channels]
,卷积核移动的步长strides
一般为[1, strides, strides, 1]
.
'SAME'
如果padding
模式选择了SAME
,那么就需要在必要的时候使用0
进行填充,给定输入尺寸,移动步长后,输出尺寸的计算公式如下:output_size=⌈input_sizestrides⌉
out_height = ceil(float(in_height) / float(strides[1]))out_width = ceil(float(in_width) / float(strides[2]))
此时,需要填充的0
的数量的计算公式为:padding_num=⟮max(kernel_size−strides,0)ifinput_sizemodstrides=0max(kernel_size−(input_sizemodstrides),0)ifinput_sizemodstrides≠0
if (in_height % strides[1] == 0): pad_along_height = max(filter_height - strides[1], 0)else: pad_along_height = max(filter_height - (in_height % strides[1]), 0)if (in_width % strides[2] == 0): pad_along_width = max(filter_width - strides[2], 0)else: pad_along_width = max(filter_width - (in_width % strides[2]), 0)
确定了要填充了总的数量后,左边/上边要填充的0
的数量为:pleft_or_top=padding_num/2,右边/下边要填充的0
的数量为:pright_or_bottom=padding_num−pleft_or_top
pad_top = pad_along_height // 2pad_bottom = pad_along_height - pad_toppad_left = pad_along_width // 2pad_right = pad_along_width - pad_left
'VALID'
如果选择了VALID
模式,那么情况就比较简单了,确定了输入尺寸、卷积核尺寸以及步长后,输出的尺寸大小为:output_size=⌈input_size−kernel_size+1strides⌉
out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))out_width = ceil(float(in_width - filter_width + 1) / float(strides[2]))
一个例子
比如输入图片是28*28
的单通道图片,其输入shape
为[batch_size, 28, 28, 1]
;
那么图像的尺寸经过以上两次卷积,两次池化后的变化如下: [batch_size, 28, 28, 1]
↓ (第一层卷积)[batch_size, 28, 28, 32]
↓ (第一层池化)[batch_size, 14, 14, 32]
↓ (第二层卷积)[batch_size, 14, 14, 64]
↓ (第二层池化)[batch_size, 7, 7, 64]
如果上述所有的卷积核,池化核以及步长都保持不变,但是全部使用VALID
模式,那么尺寸变化如下:[batch_size, 28, 28, 1]
↓ (第一层卷积)[batch_size, 24, 24, 32]
↓ (第一层池化)[batch_size, 12, 12, 32]
↓ (第二层卷积)[batch_size, 8, 8, 64]
↓ (第二层池化)[batch_size, 4, 4, 64]
Reference
- CNN中的padding
- Android中的padding&&margin
- 加密中的填充(padding)技术
- Android中的layout_margin和padding
- Android shape中的padding无效
- CSS中的margin与padding
- CNN训练中的技巧
- CNN中的卷积操作
- CNN中的一些概念
- 再看CNN中的卷积
- CNN中的filter
- CNN中的dropout理解
- padding
- Padding
- padding
- padding
- 机器学习----matlab中的CNN
- CNN学习中的一些要点
- 文章标题
- elk 快速搭载
- Linux下Eclipse新建maven项目报错:Discover and map Eclipse plugins to Maven plugin goal executions
- IT的道德与伦理
- 安装NVIDIA显卡驱动
- CNN中的padding
- HTML5 实现手机拍照上传
- 如何在wandboard上加载Android操作系统
- 2017全国职业院校技能大赛物联网.net软件开发题目答案
- HttpClient使用详解
- F
- 贝塞尔曲线 基本使用
- 作业
- 将json格式的参数改为访问链接参数的解决方法