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,有没有办法指定沿轴的填充?的主要内容,如果未能解决你的问题,请参考以下文章