如何在conv2d

时间:2017-11-29 06:44:03

标签: python tensorflow anaconda padding convolution

我试图在python中将张量传递给CNN。我正在使用 tf.layers.conv2d 。我想将输出尺寸作为输入的一半。我知道我可以使用相同的填充#39;然后是最大池化层来实现这一点,但我在最近的一篇论文中发现的另一种方法是使用3x3内核和2x2步长以及 1x1填充

现在,据我所知,conv2d允许一个名为padding的参数,该参数可以是有效的'或者'相同',它不允许填充特定长度。

有什么方法可以直接在操作中实现?我问的是,因为这个想法是使用多个卷积层,每个卷积层在长度和宽度方面都连续减半。

如果有人可以指出类似的主题或对此有所帮助,那就太棒了。

编辑:

我被要求提供代码。但由于我遇到了需要设计CNN的第一点,因此没有太多的代码。尽管如此,这是接受初始输入并开始定义CNN的部分(这里我保持填充='相同'因为我正在检查是否可行):

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

我现在陷入困境,因为进一步需要将这个初始层正确定义为连续层也将按照相同的原则工作。

另外,我的初始输入尺寸是224x224图像,带有1个通道(灰度图像)

1 个答案:

答案 0 :(得分:1)

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

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

这意味着我在每个图层之前使用 tf.pad ,其中变量' paddings'定义如下

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

这可确保在传递卷积之前填充每一层,从而根据需要提供输出