TensorFlow中CNN的两种padding方式“SAME”和“VALID”

来源

dilation_rate为一个可选的参数,默认为1,这里我们可以先不管它。
整理一下,对于“VALID”,输出的形状计算如下:

new_height=new_width=⌈(W–F+1)/S⌉

对于“SAME”,输出的形状计算如下:
new_height=new_width=⌈W/S⌉

其中,W为输入的size,F为filter为size,S为步长,⌈⌉为向上取整符号

总之,TensorFlow 使用如下等式计算 SAME 、PADDING

SAME Padding, 输出的高和宽,计算如下:

out_height = ceil(float(in_height) / float(strides1))

out_width = ceil(float(in_width) / float(strides[2]))

VALID Padding, 输出的高和宽,计算如下:

out_height = ceil(float(in_height - filter_height + 1) / float(strides1))

out_width = ceil(float(in_width - filter_width + 1) / float(strides[2]))

维度

综合目前所学的知识,我们应该如何计算 CNN 中每一层神经元的数量呢?

输入层(input layer)维度值为W, 滤波器(filter)的维度值为 F (height * width * depth), stride 的数值为 S, padding 的数值为 P, 下一层的维度值可用如下公式表示: (W−F+2P)/S+1。

我们可以通过每一层神经元的维度信息,得知模型的规模,并了解到我们设定的 filter size 和 stride 如何影响整个神经网络的尺寸。

正解

H = height, W = width, D = depth

我们有一个输入维度是 32x32x3 (HxWxD)
20个维度为 8x8x3 (HxWxD) 的滤波器
高和宽的stride(步长)都为 2。(S)
padding 大小为1 (P)
计算新的高度和宽度的公式是:

new_height = (input_height - filter_height + 2 * P)/S + 1
new_width = (input_width - filter_width + 2 * P)/S + 1

输出的维度(shape)是什么?
(32-8+2*1)/2+1=14
滤波器的个数20就是新的深度

posted @ 2018-02-24 19:59  james.yj  阅读(527)  评论(0编辑  收藏  举报