如何动态选择卷积?
使用占位符似乎不起作用:
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_size
和strides
会出现类似的问题。
答案 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,其中每个条目对应于回旋输入的相应维度中的步幅。