如何在Tensorflow或Pytorch中实现位置特定的卷积滤波器?

时间:2018-10-02 19:01:10

标签: python tensorflow deep-learning conv-neural-network pytorch

我想实现一个卷积层,为每个输出位置使用不同的卷积滤波器。具体地说,考虑输出为16 * 16 * 128(W * H * C)的情况。没有3 * 3 * 128过滤器,而是有16 * 16过滤器;每个尺寸为3 * 3 * 128。这将导致大量的参数,但是可能的情况是,每个3 * 3 * 128滤波器可能是相同的,只是按不同的常数进行缩放,并且可以通过边网学习这些常数。这样,参数的数量就不会太多。

Dynamic Filter Networks中简要介绍了类似的想法,但是我找不到特定于位置的过滤器的实现。我的问题是,如果我们要使用位置特定的卷积滤波器,如何在Tensorflow或Pytorch中实现它?我需要编写自己的操作还是有一些聪明的方法来使用提供的功能?如果我必须编写OP,是否有任何技巧可以轻松实现此想法?任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

根据定义,卷积不是特定于位置的-这就是使其成为卷积的原因。如果要泛化卷积,请记住,最终卷积是简单线性运算的特殊情况。因此,您可以将“特定于位置的”卷积实现为具有非常特定的稀疏权重的全连接层(nn.Linear)。

答案 1 :(得分:0)

卷积比全连接层更有效的原因是因为它们是平移不变的。如果您希望具有取决于位置的卷积,则需要向卷积添加两个额外参数,即具有 N+2 个输入通道,其中 x, y 坐标是两个附加通道的值(例如 {{3} },或CoordConv)。