Keras中Padding效果可以使用valid和same指定,有些教程上直接把valid和same解读为是否使用填充(valid:不填充,same:填充),有些教程甚至把same解读为输出size和输入size相同,我个人理解以上说法都是片面的。官方帮助上这样说的:“valid”代表只进行有效的卷积,即对边界数据不处理。“same”代表保留边界处的卷积结果,通常会导致输出shape与输入shape相同。注意两点:1.并未说明是否填充;2.并未说same一定会导致shape相同。经过深入思考,个人理解如下:
1.valid参数代表对输入空间的有效扫描,特别强调“有效扫描”,即最后一次扫描输入特征不够被卷积窗口完全覆盖,则放弃剩下的未扫描的输入特征,扫描结束。此时输出大小的计算:Wout = ceil[(Win - F + 1)/ S]。same参数代表全扫描,也就是说,如果不够覆盖,则在两端边界填充0以实现全部覆盖。此时输出大小的计算:Wout=ceil[Win/S]
2.使用same参数时,导致输出shape和输入shape相同的情况只可能是步幅S=1的情况。一般而言,我们常使用3*3 S=1的卷积窗,因此在左右各填充1列或行时,Wout和Win的shape相同。
3.之所以不能片面理解为填充与不填充,举例说明:Win=14,F=2,S=2,则valid下输出为ceil[(14-2+1)/2] = 7,same下输出为ceil[14/2]= 7,也就是说并未填充也能达到全覆盖效果,所以即便使用same参数,也不会填充0.