Keras中六边形网格上的卷积层

人工智能 神经网络 机器学习 卷积神经网络 Python 喀拉斯
2021-11-08 12:36:19

Keras 的卷积和反卷积层是为方形网格设计的。有没有办法让它们适应六边形网格?

例如,如果我们使用轴坐标,则半径为 1 的内核的输入(x,y)应为:

[(x-1,y), (x-1,y+1), (x,y-1), (x,y+1), (x+1,y-1), (x+1, y)]

一种选择是用一个 3 x 3 的盒子来捏造它,但是你使用的是不同距离的单元格。

一些想法:

  • 修改 Kera 的卷积层代码以使用这些输入而不是默认输入。问题是 Kera 调用它的后端而不是自己实现它,这意味着我们也需要修改后端。
  • 使用 3 x 3 的框,但将权重设置为 0(x-1,y-1)(x+1,y+1)0。不幸的是,我不知道如何在 Kera 中将权重永久设置为给定值。
  • 使用立方体坐标而不是轴坐标。在这种情况下,一个 3 x 3 x 3 的框将只包含中心十六进制的邻居和设置为 0 的输入。问题是它使输入数组变得更大。更有问题的是,一些对应于非十六进制的坐标(例如 (1,0,0))将被分配非零输出(因为 (0,0,0) 落在其 3 x 3 x 3 框内)。

有没有更好的解决方案?

1个回答

在处理扩散问题时,我在六边形网格上的 2D 卷积遇到了类似的问题,并偶然发现了这个问题。除了使用立方体坐标,您还可以使用doubled coordinates,我发现它更容易保存在 2D 数组中。

仅更改直接邻居和单元本身的示例内核将是这个

kernel = np.array([[0,   0.1, 0,   0.1, 0  ],
                   [0.1, 0,   0.4, 0,   0.1],
                   [0,   0.1, 0,   0.1, 0  ]])

我对 Keras 了解不多,但我认为这也是可能的。