【问题标题】:Tensorflow, is there a way to specify padding along axes ?Tensorflow,有没有办法指定沿轴的填充?
【发布时间】:2017-12-27 13:56:37
【问题描述】:

我想在张量流中对图像执行卷积。我希望内核与图像一样高并且非常薄。例如:

kernel_size = [200, 24]
image_size = [200, 400]

如果我使用填充“SAME”,而不是取出向量,我会返回 [200, 400] 图像,因为 tensorflow 在顶部和底部填充图像,并在填充图像上与内核进行卷积。

另一方面,如果我使用填充“VALID”,顶部和底部的问题就会消失,但它也没有完全覆盖我的图像的水平方向,这样,如果图像的水平尺寸不能被内核维度整除,你会失去它的一部分。

有没有办法在顶部和底部执行“VALID”填充以及左右“SAME”填充?还是有另一种方法可以做到这一点?

【问题讨论】:

    标签: tensorflow convolution


    【解决方案1】:

    使用 tensorflow 卷积函数的默认填充选项无法做到这一点,您必须手动填充张量以使水平维度可以被内核维度整除。

    在手动填充后使用 VALID 填充,以免手动填充的像素被视为填充以外的任何内容

    要手动填充您的张量,您可以使用tf.concat 和具有您想要的形状和值的常量张量。如果您的图像始终大小相同,这将不难弄清楚。

    【讨论】:

      【解决方案2】:

      对于任何non-standard padding,TF 都有一个自定义填充操作:tf.pad()。所以只要弄清楚什么是适当的填充并调用类似

      # 't' is [[1, 2, 3], [4, 5, 6]].
      # 'paddings' is [[1, 1,], [2, 2]].
      # rank of 't' is 2.
      pad(t, paddings, "CONSTANT") ==> [[0, 0, 0, 0, 0, 0, 0],
                                        [0, 0, 1, 2, 3, 0, 0],
                                        [0, 0, 4, 5, 6, 0, 0],
                                        [0, 0, 0, 0, 0, 0, 0]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        • 2021-08-03
        相关资源
        最近更新 更多