根据tensorflow中的Conv2D函数,先定义几个基本符号:
- 输入矩阵W*W,这里只考虑输入宽高相等的情况,如果不相等,推导方法一样
- filter矩阵F*F,卷积核
- stride值S,步长
- 输出宽高为new_height,new_width
在tensorflow中padding的方式有两种,一种是valid,一种是same
padding=‘valid‘
new_height = new_width = (W - F + 1) / S (结果向上取整)
也就是说,Conv2D的valid方式不会在原有输入的基础上添加新的像素
padding=‘same‘
new_height = new_width = W / S (结果向上取整)
在高度上需要pad的像素数为:
pad_needed_height = (new_height - 1 ) * S + F - W
pad_needed_height = (new_width - 1 ) * S + F - W
根据上式, 输入矩阵上方添加的像素数为:
pad_top = pad_needed_height / 2 (结果取整)
输入矩阵下方需要添加的像素数为:
pad_down = pad_needed_height - pad_top
输入矩阵左方需要添加的像素数为:
pad_left = pad_needed_width / 2 (结果取整)
输入矩阵右方需要添加的像素数为:
pad_right = pad_needed_width - pad_left