首页 > 解决方案 > 如何在 tensorflow/keras 中使用常量滤波器执行卷积

问题描述

在 resnet 的某个阶段,我每张图像有 6 个特征,即每个示例的形状为 1X8X8X6,我想将每个特征与 4 个大小为 1X2X2X1 的恒定滤波器 (DWT) 相结合,步幅为 2,以便在下一层获得 24 个特征并且图像变成1X4X4X24。但是,我无法为此目的使用 tf.nn.conv2d 或 tf.nn.convolution,conv2d 表示输入的第四维等于过滤器的第三维,但我该怎么做,我尝试了第一个过滤器,但即使这样也不起作用:

x_in = np.random.randn(1,8,8,6)
kernel_in = np.array([[[[1],[1]],[[1],[1]]]])
kernel_in.shape
x = tf.constant(x_in, dtype=tf.float32)
kernel = tf.constant(kernel_in, dtype=tf.float32)
tf.nn.convolution(x, kernel, strides=[1, 1, 1, 1], padding='VALID')

标签: pythontensorflowmachine-learningkerasdeep-learning

解决方案


以这种方式尝试

x_in = np.random.randn(1,8,8,6) # [batch, in_height, in_width, in_channels]
kernel_in = np.ones((2,2,6,24)) # [filter_height, filter_width, in_channels, out_channels]

x = tf.constant(x_in, dtype=tf.float32)
kernel = tf.constant(kernel_in, dtype=tf.float32)

tf.nn.conv2d(x, kernel, strides=[1, 2, 2, 1], padding='VALID')
# <tf.Tensor: shape=(1, 4, 4, 24), dtype=float32, numpy=....>

推荐阅读