假设除了图像之外,我还在图像的 X 轴上有一个从左到右的渐变,以及在 Y 轴上从上到下的另一个渐变。这两个渐变与图像大小相同,范围都在 -0.5 到 0.5 之间。
现在,我想让卷积核(又名卷积滤波器或卷积权重)取决于梯度中的 (x, y)
位置。因此,内核是梯度的函数,就好像内核是嵌套迷你神经网络的输出一样。这将使过滤器的权重在每个位置都不同,但与其邻居稍微相似。如何在 PyTorch 或 TensorFlow 中执行此操作?
当然,我可以计算 Toeplitz matrix (a.k.a. diagonal-constant matrix) 我自己,但如果假装x==y==n
,矩阵乘法将需要O(n^3)
次运算,而卷积可以在O中实现(n^2) 通常
。或者我可以自己迭代每个元素并以非矢量化的方式进行乘法。
还有更好的想法吗?我希望在这里看到创造力,思考如何巧妙地实现这一点。我相信编码将是构建网络层的一种有趣的方式,该网络层能够执行类似于 Spatial Transformer Networks 的简化版本的操作。 ,但其空间变换将独立于图像。
最佳答案
这是我针对此问题的简化版本想到的解决方案,其中将使用权重的线性组合,而不是真正使用嵌套的迷你神经网络:
可以进行 4 次不同的卷积传递,以获得 4 个特征图,然后将这 4 个图与梯度(2 个垂直梯度和 2 个水平梯度)相乘,并将它们加在一起,以便只剩下 1 个图。然而,这将是不同映射的线性组合,这比真正使用嵌套神经网络更简单,而嵌套神经网络首先会改变内核。
关于machine-learning - PyTorch 或 TensorFlow 中可以使用位置相关的卷积滤波器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48331966/