Tensorflow,有没有办法指定沿轴的填充?

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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]]

【讨论】:

以上是关于Tensorflow,有没有办法指定沿轴的填充?的主要内容,如果未能解决你的问题,请参考以下文章

避免在ggplot中沿轴剪裁点

查找对应于另一个数组中沿轴的最小值的数组

获取 3D numpy 数组中沿轴的连续非 nans 值总和的最大值

平均值、方差和标准

《计算机图形学基础》之变换矩阵

pytorch torch.cumsum(input, dim, out=None)函数(沿轴逐级累加)