如何动态选择卷积步幅?

Max*_*axB 5 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')
Run Code Online (Sandbox Code Playgroud)

这给了一个TypeError.

类似的困难出现与pool_sizestrides做池时.

asa*_*kin 5

不幸的是,Tensorflow不允许将Tensors传递给定义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)
Run Code Online (Sandbox Code Playgroud)

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