【问题标题】:How to implement a location specific convolutional filters in Tensorflow or Pytorch?如何在 Tensorflow 或 Pytorch 中实现特定位置的卷积过滤器?
【发布时间】:2019-03-07 23:03:36
【问题描述】:

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

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

【问题讨论】:

  • "每个 3*3*128 过滤器可能是相同的,除了按不同的常数缩放"相当于使用普通卷积(3*3*128 过滤器在每个位置都相同) 然后按学习因子缩放每个位置的输出
  • @myrtlecat 是的,我明白了,但这只是一个简单的案例动机。举一个更有趣的例子,仍然是一个 3*3*128 的过滤器,但是在每个位置,这个过滤器是按元素乘以跨通道的特定于位置的 3*3 矩阵。这不会使参数增加太多。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-09-25
      • 2018-06-28
      • 2017-01-14
      • 1970-01-01
      • 2019-12-09
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      相关资源
      最近更新 更多