如何动态选择卷积步幅?

时间:2017-11-02 00:43:08

标签: tensorflow

如何动态选择卷积?

使用占位符似乎不起作用:

s = tf.placeholder(np.int32)
image = tf.placeholder(np.float32, [None, 3, 32, 32])
tf.layers.conv2d(image,
                 filters=32,
                 kernel_size=[3, 3],
                 strides=[s, s],
                 padding='same',
                 data_format='channels_first')

这会产生TypeError

在进行合并时pool_sizestrides会出现类似的问题。

1 个答案:

答案 0 :(得分:5)

不幸的是,Tensorflow不允许将张量传递给conv2d的定义。我使用的方法基本上运行conv2d,步幅为1,然后用必要的步幅切片结果。可能不是最佳方法,但它有效并且tf.strided_slice可以使用张量。所以在你的情况下它会是这样的:

s = tf.placeholder(np.int32,[4])
image = tf.placeholder(np.float32, [None, 3, 32, 32])
convoluted = tf.layers.conv2d(image,
                 filters=32,
                 kernel_size=[3, 3],
                 strides=[1,1],
                 padding='same',
                 data_format='channels_first')
result = tf.strided_slice(convoluted,
                          [0,0,0,0],
                          tf.shape(convoluted),
                          s)

然后,您可以在运行期间将4个步幅大小传递给s,其中每个条目对应于回旋输入的相应维度中的步幅。