美文网首页神经网络
Tensorflow中卷积的padding操作

Tensorflow中卷积的padding操作

作者: Traphix | 来源:发表于2016-06-23 21:07 被阅读26190次

    之前一直对tensorflow的padding一知半解,直到查阅了tensorflow/core/kernels/ops_util.cc中的Get2dOutputSizeVerbose函数,才恍然大悟,下面是具体的介绍

    实际上tensorflow官方API里有介绍!!不科学上网貌似打不开

    根据tensorflow中的conv2d函数,我们先定义几个基本符号

    1、输入矩阵 W×W,这里只考虑输入宽高相等的情况,如果不相等,推导方法一样,不多解释。

    2、filter矩阵 F×F,卷积核

    3、stride值 S,步长

    4、输出宽高为 new_height、new_width

    当然还有其他的一些具体的参数,这里就不再说明了。

    我们知道,padding的方式在tensorflow里分两种,一种是VALID,一种是SAME,下面分别介绍这两种方式的实际操作方法。

    1、如果padding = ‘VALID’

    new_height = new_width = (W – F + 1) / S (结果向上取整)

    也就是说,conv2d的VALID方式不会在原有输入的基础上添加新的像素(假定我们的输入是图片数据,因为只有图片才有像素),输出矩阵的大小直接按照公式计算即可。

    2、如果padding = ‘SAME’

    new_height = new_width = W / S (结果向上取整)

    在高度上需要pad的像素数为

    pad_needed_height = (new_height – 1)  × S + F - W

    根据上式,输入矩阵上方添加的像素数为

    pad_top = pad_needed_height / 2  (结果取整)

    下方添加的像素数为

    pad_down = pad_needed_height - pad_top

    以此类推,在宽度上需要pad的像素数和左右分别添加的像素数为

    pad_needed_width = (new_width – 1)  × S + F - W

    pad_left = pad_needed_width  / 2 (结果取整)

    pad_right = pad_needed_width – pad_left

    至此,关于tensorflow的卷积padding操作介绍完毕,下面是关于此操作的源码(Get2dOutputSizeVerbose函数的部分节选),我也不会用MarkDown,索性直接截图了,以供参考

    相关文章

      网友评论

      • f895a9d03245:学习了
      • 6910afe5901c:楼主,如果pad_needed_height和pad_needed_weight为奇数,分别计算出四边padding也是向上取整吗?例如计算出pad_needed_height=3, 那么pad_top=2(1.5向上取整为2,下同), pad_down=2,这样不就增加了4个像素的高度吗?所以有些不明白。
        6910afe5901c:明白了,pad_down = pad_needed_height - pad_top,先计算出一边,在用总的减去已计算的一边
      • 49a71d2e21b8:小而美的东西,作者写得不错,给个👍
        李家仕:@李家仕 0
        李家仕:求问,padding添加的像素值一般为多少啊?
        Traphix:@熊孩子闯一闯 谢谢

      本文标题:Tensorflow中卷积的padding操作

      本文链接:https://www.haomeiwen.com/subject/vghodttx.html