2016-07-26 41 views
1

我习惯于在Tensorflow中使用学习过滤器,应用于输入数据(或前一层的输出)。在TensorFlow中使用输入作为卷积过滤器

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

但是有可能使用输入本身作为过滤器吗?也就是说,我不想为每个minibatch切片学习相同的滤镜,而是希望对每个切片使用不同的滤镜 - 从输入直接派生的滤镜,我不知道。例如,如果我的输入数据由两部分组成,那么它们都是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] ]

然后我想与[0,1][2,0]等执行的[1,2]卷积,的[3,4](的尺寸适合在我的情况下,这仅仅是一个示范)。

使用nn.conv2d可以这样做吗?如果没有,是否可以使用scan或以其他方式使用?

谢谢。

回答

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] 
+1

这只是一个例子 - 在我的例子中,我确实有矩阵,我需要执行卷积。 – yoki

+0

请指定您要卷积的两个操作数的形状。 – keveman

+0

尺寸可以更改。卷积是在一个m×n矩阵和一个k×n滤​​波器(k yoki

相关问题