繁体   English   中英

如何在conv2d中添加特定的填充

[英]How to add specific padding in conv2d

我正在尝试将张量传递给python中的CNN。 我为此使用tf.layers.conv2d 我想将输出尺寸作为输入的一半。 我知道我可以在最大池化层之后使用“相同”的填充来实现此目的,但是我在最近的一篇论文中发现的另一种方法是,除了使用1x1填充之外,还使用具有2x2跨度的3x3内核

现在,据我所知,conv2d允许使用一个称为padding的参数,该参数可以是“ valid”或“ same”,它不允许特定长度的padding。

有什么方法可以直接在手术中实现吗? 我之所以问是因为这种想法是使用多个卷积层,每一层都将长度和宽度尺寸依次减半。

如果有人可以指出类似的话题或对此提供帮助,那就太好了。

编辑:

我被要求包括代码。 但是没有太多代码,因为我停留在需要设计CNN的第一点。 尽管如此,这是接受初始输入并开始定义CNN的部分(在此,我一直保持padding ='same',因为我一直在检查是否可行):

def conv2d(z):
    output = tf.layers.conv2d(z,strides=[2,2],filters=3,padding='same',kernel_size=3);

我被困在这一点上,因为任何进一步的工作都需要正确定义初始层,因为连续的层也将以相同的原理工作。

另外,我的初始输入大小是1通道的224x224图像(灰度图像)

因此,我找到了答案。 在tensorflow中有一个称为pad的内置函数,可以用来解决它。 我正在做的是这个

output = tf.pad(output, paddings, "CONSTANT")
output = tf.layers.conv2d(output,strides=[2,2],kernel_size=3,filters=3)

这意味着我在每一层变量“ paddings”定义如下的层之前使用tf.pad。

paddings=tf.constant([[0,0], [1,1],[1,1],[0,0]])

这样可确保在传递每个卷积之前对其进行填充,从而提供所需的输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM