tensorflow中patch的点积



我有两个相同大小和尺寸的方阵。我想计算每一对补丁之间的点积。基本上,我想实现以下操作:

def patch_dot(A, B, patch_dim):
    res_dim = A.shape[0] - patch_dim + 1
    res = np.zeros([res_dim, res_dim, res_dim, res_dim])
    for i in xrange(res_dim):
        for j in xrange(res_dim):
            for k in xrange(res_dim):
                for l in xrange(res_dim):
                    res[i, j, k, l] = (A[i:i + patch_dim, j:j + patch_dim] *
                                       B[k:k + patch_dim, l:l + patch_dim]).sum()
    return res

显然这将是一个极其低效的实现。Tensorflow tf.nn。conv2d似乎是一个很自然的解决方案,因为我实际上是在做一个卷积,但是我的过滤矩阵不是固定的。在Tensorflow中是否有一个自然的解决方案,或者我应该开始考虑实现我自己的tf-op?

这样做的自然方法是首先使用tf提取矩阵B的重叠图像补丁。Extract_image_patches,然后应用tf.nn。使用tf.map_fn.

对A和每个B子patch进行conv2D函数。

注意,在使用tf之前。Extract_image_patches和tf.nn。你需要使用tf. shaping .

将你的矩阵重塑为形状为[1, width, height, 1]的4D张量

同样,在使用tf之前。Map_fn,您还需要使用tf。对op进行转置,使B子块由张量的第一个维度索引,作为tf.map_fn的elems参数。

相关内容

  • 没有找到相关文章

最新更新