gpt4 book ai didi

python - tensorflow 中补丁的点积

转载 作者:行者123 更新时间:2023-11-30 09:10:40 24 4
gpt4 key购买 nike

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

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.extract_image_patches 提取矩阵 B 的重叠图像 block 。 ,然后应用 tf.nn.conv2D使用 tf.map_fn 在 A 和每个 B 子补丁上运行.

使用前请注意tf.extract_image_patchestf.nn.conv2D您需要使用 tf.reshape 将矩阵 reshape 为形状 [1, width, height, 1] 的 4D 张量.

此外,在使用之前tf.map_fn ,您还需要使用 tf.transpose op 以便 B 子补丁由您用作 tf.map_fnelems 参数的张量的第一个维度进行索引.

关于python - tensorflow 中补丁的点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39632849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com