版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hzhj2007/article/details/81504993
tf.nn.convolution(input, filter, padding, strides=None, dilation_rate=None, name=None, data_format=None)
函数参数的解释详见该地址。本文仅对关注的padding和dilation_rate进行说明。
padding:填充算法,仅支持"VALID"
or "SAME";
dilation_rate:可选参数,指定滤波器上采样或输入下采样的速率。论文中也叫input stride or dilation,有效滤波器的大小为spatial_filter_shape + (spatial_filter_shape - 1) * (rate - 1),是通过在任一维度上原始滤波器的连续元素间填充(dilation_rate[i]-1) 个0来获得。 若其任一维度的数值大于1时,则参数strides的值均为1.
data_format:指定输入或输出的通道维度在最后一维还是在第二维,对于1维数据,即N=1时,该参数的默认值为'NWC',也可指定为'NCW';当N=2时,默认为'NHWC',也可指定为'NCHW'‘;当N=3时,有效值为'NDHWC'。
特别的,当数据格式以'NC'开头时,输出数据的大小取决于padding的方法:
If padding == "SAME": output_spatial_shape[i] = ceil(input_spatial_shape[i] / strides[i])
If padding == "VALID": output_spatial_shape[i] = ceil((input_spatial_shape[i] - (spatial_filter_shape[i]-1) * dilation_rate[i]) / strides[i]).
其中,ceil为向上取整,即ceil(0.1)=1。
此处关于1维数据的padding可以帮助更好的理解两个参数的处理过程。
-
"VALID"
= without padding:inputs: 1 2 3 4 5 6 7 8 9 10 11 (12 13) |________________| dropped |_________________|
-
"SAME"
= with zero padding:pad| |pad inputs: 0 |1 2 3 4 5 6 7 8 9 10 11 12 13|0 0 |________________| |_________________| |________________|
- 输入数据宽度= 13
- 滤波器宽度 = 6
- 步长 = 5
ps:
"VALID"
仅舍弃最后列,或最后行的数据"SAME"
尝试在数据左右均匀的填充0,若填充个数为奇数时,则将多余的填充值放数据右侧,如本例中所示。垂直方向也是类似的处理逻辑。
参考文献: