Chapter 2.1 实现一个均值滤波器

    本节我们利用tf的一些函数来实现一个最简单的均值滤波器对图片进行滤波,假设图片的大小为16*16*1,设计一个模块来实现均值滤波

首先介绍一下tf.nn.conv2d函数

conv2d(

input,filter,strides,padding,use_cudnn_on_gpu=None,data_format=None,name=None

)

其中input应该为四维tensor: [batch, in_height, in_width, in_channels]

filter为四维tensor:[filter_height, filter_width, in_channels, out_channels]

padding可以选择:‘SAME'也就是使得输入输出W,H不改变。'VALID'指不加padding

关于padding,查看api可以看到,'SAME'的意思并不是说输入输出不变

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]))

也就是说与strides有关,而valid是指不加padding

strides强制要求首尾必须为一:[1,s,s,1]


以一个错误为例子,学习conv2d的用法:

想法:输入一个 [1,32,32,3]的全部为4的tensor,滤波器尺寸为[2,2,3,6]其值全部为1,步长为2.

希望输出[1,32,32,,6] 其值全部为1

实际上:输出 [1,16,16,,6] 其值全部为12


Chapter 2.1 实现一个均值滤波器_第1张图片

问题:

1.关于输出值12 :这里是卷积的运算概念没有掌握,filter为6个 [2,2,3]的滤波器,每一个滤波器应该对3个channel的值进行计算:所以是(0.25*4+0.25*4+0.25*4+0.25*4)*3=0.25*4*4*3=12

2.关于padding:上面也提到了,'SAME’并不表示输入输出w,h一致,而是与步长有关

你可能感兴趣的:(Chapter 2.1 实现一个均值滤波器)