在TensorFlow中使用输入作为卷积滤波器

时间:2016-07-26 21:05:27

标签: tensorflow

我过去常常在Tensorflow中使用学习过滤器,应用于输入数据(或前一层的输出)。

nn.conv2d的输入形状为[h,w,in_channels,out_channels],如果我的数据形状为[?,n1,n2,1](第一维是小批量大小),那么我会将其用作shape对于conv2d [h,w,1,m],其中m是我想要学习的过滤器数量。

但是可以将输入本身用作过滤器吗?也就是说,我不想为每个切片学习相同的过滤器,我想对每个切片使用不同的过滤器 - 直接从输入中导出的过滤器,我不学习。

例如,如果我的输入数据由两部分组成,则它们2D和I都具有5的小批量,例如 D1 = [ [1,2] , [3,4] , [5,6] , [7,8] , [9,0] ]

D1 = [ [0,1] , [2,0] , [3,2] , [8,1] , [0,0] ]

然后我想对[1,2][0,1][3,4][2,0]进行卷积等等(尺寸适用于我的情况,这只是演示)。

是否可以使用nn.conv2d执行此操作?如果没有,是否可以使用scan或以任何其他方式?

感谢。

1 个答案:

答案 0 :(得分:0)

在你的情况下,你所谓的'卷积与来自输入的过滤器'基本上是逐元素乘法,然后是减少运算。例如,您可以执行以下操作:

sess = tf.InteractiveSession()
D1 = tf.constant([ [1,2] , [3,4] , [5,6] , [7,8] , [9,0] ])
D2 = tf.constant([ [0,1] , [2,0] , [3,2] , [8,1] , [0,0] ])

# Element-wise multiply D1 and D2, then reduce along dimension 1
result = tf.reduce_sum(D1 * D2, reduction_indices=[1])

print(result.eval())
# prints [ 2  6 27 64  0]