【发布时间】:2019-07-21 12:03:04
【问题描述】:
需要
您好,我正在尝试在来自圆柱域的图像上使用 CNN,因此我有兴趣以循环(或循环)方式应用卷积层。 我的意思是一个卷积层而不是用零填充图像只会环绕图像(或图像周围的内核)。
想法、搜索和想法
来自信号处理背景,我预计它已经被涵盖:实际上,当在频域中执行计算时(即通过 DFT),这种循环来自免费的,而不是额外的努力(称为“零填充” ) 是必需的以避免循环模棱两可。
好吧,好吧:我了解到,由于内核大小通常很小,因此可以在基域中更方便地进行计算。我无法弄清楚这不可行的任何充分理由,所以我希望存在一些直接的方法来进行循环卷积。
但我在 Keras 和 TensorFlow 文档中都没有找到该函数的覆盖范围。此外,我发现很少或根本没有真正相关的讨论:Torch7 discussion
所以我有以下选择:
- 通过继承 Keras 的
layer.Layer类来实现我自己的CyclicConv2D层,如here 所述 - 按照here 的描述,提交我自己的实验性新功能拉取请求。很快,我会考虑为“padding=”参数添加一些“wrap”值,或者添加一个新的“wrap=”参数。它应该指定图像应该沿着哪些轴环绕。事实上,这可能只需要沿一个维度,即圆形维度,而不是两个维度。
问题
我应该首先解决任何更直接的选择或信息来源吗?
否则,我在哪里可以找到如何实施前者的建议?
对于后者,我必须承认我描述它更多是为了激发一些集体思考应该如何从用户的角度实现它,但我真的不觉得能够贡献一个好的拉取请求(即包括好的代码) .无论如何,我将不胜感激任何建议从哪里开始。
【问题讨论】:
-
嗨@lurix66 你找到解决方案了吗?我认为创建自己的图层的问题在于找到一种有效的方法。最简单有效的实现是从域的另一侧(光晕或幽灵单元)镜像实际数据像素,直至内核大小。然后,当您使用
valid填充时,它将返回一个具有填充前原始大小的图像。 -
没有@Ed,谢谢,还没有。我正在考虑用从另一端复制的列(行)显式地预先填充左侧(顶部)的输入张量,然后调用通常的
valid卷积。我意识到这也应该在池化层上实现,并且让它在多维卷积和池化的一般情况下工作是合理的。 -
我终于成功了,我想发表我自己对这个问题的回答,但是这个问题已经因为太宽泛而被关闭了,我无法做到它。我能做什么?
-
提出一个新问题。一个更有针对性的新问题。或者回答这个问题 (stackoverflow.com/questions/49189496/…)
-
@Elias Hasle,我投票决定重新开放
标签: python keras conv-neural-network keras-layer