我是否获得tf.nn.depthwise_conv2d()的正确输出?

时间:2019-05-21 23:39:13

标签: python tensorflow machine-learning conv-neural-network

我正在尝试创建自己的深度可分离卷积,并且想针对张量流实现对其进行测试,但是我无法确定我是否使其能够正常工作。这是我的代码

首先,我创建图像和深度过滤器。图像为2个通道,每个通道为3x3。过滤器也是2个3x3通道。两个滤镜上的滤镜值相同,而图像通道的滤镜值略有不同。

depth_filter = np.array([   [[0,-1,0],[-1,5,-1],[0,-1,0]],
                                [[0,-1,0],[-1,5,-1],[0,-1,0]]], 
                            np.float32)
image = np.array([  [[102,109,124],[99,98,98],[103,103,98]],
                        [[101,108,123],[98,97,97],[102,102,97]]], 
                        np.float32)

然后,我设置了一些变量以使自己更轻松一些。

C = image.shape[0]
H = image.shape[1]
W = image.shape[2]
R_H = depth_filter.shape[1]
R_W = depth_filter.shape[2]

然后我重塑矩阵,以便将它们用于张量流的实现中。

kernel = tf.reshape(depth_filter, [R_H,R_W,C,1], name='kernel')
imageconv = tf.reshape(image, [1,H,W,C], name='imageconv')
dout = tf.nn.depthwise_conv2d(imageconv, kernel, [1,1,1,1], padding='SAME')

问题是我得到了这个输出

[[[-325.    0.]
  [-407.  406.]
  [-206.  406.]]

 [[ 327. -208.]
  [  85.   76.]
  [-199.  212.]]

 [[ 393. -204.]
  [ 438. -424.]
  [   0. -326.]]]

我期望获得2个3x3矩阵,其中内核上的通道1将过滤通道1图像,内核上的通道2将过滤通道2图像。当每个通道只有1个通道时,我将获得1个3x3图像。是我不了解深度卷积的工作原理还是做错了什么?

0 个答案:

没有答案