我过去常常在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
或以任何其他方式?
感谢。
答案 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]