numpy 如何在ndarray中对掩码元素应用conv2d?

lmvvr0a8  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(123)

比如我有一个矩阵
还有面具

0 0 0 0
0 1 0 1
0 0 1 0
0 0 0 0

这里我有3个元素,我想应用conv2d。
操作是我想用它自己和它的邻居的int平均值替换掩码中的元素。
内核只是一个简单的3x3

1/9 1/9 1/9
1/9 1/9 1/9
1/9 1/9 1/9

我想要的结果是
我知道的最简单的方法是在完整的ndarray上应用conv2d,然后用掩码设置值。但是我不想对一个大的数组进行计算,因为掩码元素可能很少。
目前我的解决方案是使用np.argwhere找到所有索引,然后逐个计算,我想知道是否有更优雅的解决方案。

7hiiyaii

7hiiyaii1#

您可以通过实现一个变通方法来实现所需的结果。以下是为您的任务建议的工作流:

import tensorflow as tf

# Apply Conv2D layer to the input
x1 = tf.keras.layers.Conv2D(input)

# Multiply x1 with the mask
x1 = tf.keras.layers.Multiply([x1, mask])

# Compute the complement of the mask and multiply it with the input
x2 = tf.keras.layers.Multiply([input, tf.math.logical_not(mask)])

# Add x1 and x2
out = tf.tf.keras.layers.Add([x1, x2])

此外,如果您愿意,您可以将此功能封装在自定义TensorFlow层中。我希望这个解决方案能有效地解决你的问题。

相关问题