太原运营推广公司,外贸网站优化推广,自助建站网站哪个好,天津建设工程合同备案网站边界补充问题
原始图片尺寸为7*7#xff0c;卷积核的大小为3*3#xff0c;当卷积核沿着图片滑动后只能滑动出一个5*5的图片出来#xff0c;这就造成了卷积后的图片和卷积前的图片尺寸不一致#xff0c;这显然不是我们想要的结果#xff0c;所以为了避免这种情况#xff…边界补充问题
原始图片尺寸为7*7卷积核的大小为3*3当卷积核沿着图片滑动后只能滑动出一个5*5的图片出来这就造成了卷积后的图片和卷积前的图片尺寸不一致这显然不是我们想要的结果所以为了避免这种情况需要先对原始图片做边界填充处理。在上面的情况中我们需要先把原始图像填充为9*9的尺寸。 常用的区域填充方法包括 用3*3定义原始图像的尺寸补充为9*9的尺寸图片上的颜色只为方便观看并没有任何其他含义。 原始图像 1补零 2边界复制 3镜像 4块复制
更多理解见 理解图像卷积操作的意义
卷积操作有两个问题 1. 图像越来越小 2. 图像边界信息丢失即有些图像角落和边界的信息发挥作用较少。因此需要padding。
卷积核大小通常为奇数 一方面是为了方便same卷积padding对称填充左右两边对称补零 n2p-f1n p(f-1)/2 另一方面奇数过滤器有中心像素便于确定过滤器的位置。
padding padding的方式 备注
VALID only ever drops the right-most columns (or bottom-most rows).SAME tries to pad evenly left and right, but if the amount of columns to be added is odd, it will add the extra column to the right, as is the case in this example (the same logic applies vertically: there may be an extra row of zeros at the bottom).
不同的padding方式,VALID是采用丢弃的方式,比如上述的input_width13,只允许滑动2次,多余的元素全部丢掉
SAME的方式,采用的是补全的方式,对于上述的情况,允许滑动3次,但是需要补3个元素,左奇右偶,在左边补一个0,右边补2个0 Tensorflow中的定义 The TensorFlow Convolution example gives an overview about the difference between SAME and VALID :For the SAME padding, the output height and width are computed as:out_height ceil(float(in_height) / float(strides[1]))out_width ceil(float(in_width) / float(strides[2]))AndFor the VALID padding, the output height and width are computed as:out_height ceil(float(in_height - filter_height 1) / float(strides1))out_width ceil(float(in_width - filter_width 1) / float(strides[2]))备注
#SAME 向上取整
#VALID 向下取整
输入n*c0*w0*h0
输出n*c1*w1*h1
其中c1就是参数中的num_output生成的特征图个数w1floor((w02*pad-kernel_size)/stride)1;向下取整h1floor((h02*pad-kernel_size)/stride)1;向下取整
如果设置stride为1前后两次卷积部分存在重叠。如果设置pad(kernel_size-1)/2,则运算后宽度和高度不变。
由pad, kernel_size和stride三者共同决定。更多细节可见卷积步长
x tf.constant([[1., 2., 3.],[4., 5., 6.]])x tf.reshape(x, [1, 2, 3, 1]) # give a shape accepted by tf.nn.max_poolvalid_pad tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], paddingVALID)
same_pad tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], paddingSAME)valid_pad.get_shape() [1, 1, 1, 1] # valid_pad is [5.]
same_pad.get_shape() [1, 1, 2, 1] # same_pad is [5., 6.] 参考文献 TensorFlow中CNN的两种padding方式“SAME”和“VALID”
https://stackoverflow.com/questions/37674306/what-is-the-difference-between-same-and-valid-padding-in-tf-nn-max-pool-of-t
Tensorflow中padding的两种类型SAME和VALID