【问题标题】:Using inputs as convolution filters in TensorFlow在 TensorFlow 中使用输入作为卷积过滤器
【发布时间】:2016-07-27 05:22:27
【问题描述】:

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

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

但是是否可以将输入本身用作过滤器?也就是说,我不想为小批量的每个切片学习相同的过滤器,而是对每个切片使用不同的过滤器 - 一个直接从输入派生的过滤器,我没有学习。

例如,如果我的输入数据由两部分组成,它们都是 2D 的,我的 minibatch 为 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 或其他方式?

谢谢。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    在您的情况下,您所说的“与从输入派生的过滤器进行卷积”基本上是逐元素乘法,然后是归约操作。例如,您可以执行以下操作:

    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]
    

    【讨论】:

    • 这只是一个例子——在我的例子中,我确实有矩阵,我需要执行卷积。
    • 请指定要卷积的两个操作数的形状。
    • 尺寸可以改变。卷积是在一个 m x n 矩阵和一个 k x n 滤波器 (k
    猜你喜欢
    • 2017-01-14
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多