lur*_*x66 6 python conv-neural-network keras keras-layer
您好,我正在尝试在来自圆柱域的图像上使用 CNN ,所以我有兴趣以圆形(或循环)方式应用卷积层。我的意思是一个卷积层,它不是用零填充图像,而是环绕图像(或图像周围的内核)。
来自信号处理背景,我预计它已经涵盖:实际上,当在频域中执行计算(即通过 DFT)时,这种循环来自免费,而需要额外的努力(称为“零填充”)以避免循环模棱两可。
好吧:我了解到,由于内核大小通常非常小,因此在基域中可以更方便地进行计算。我想不出为什么这不可行的任何充分理由,所以我希望存在一些进行循环卷积的直接方法。
但是我没有发现这个函数的覆盖范围,无论是在 Keras 还是在 TensorFlow 文档中。此外,我发现很少或没有真正相关的讨论:Torch7 Discussion
所以我剩下以下选项:
CyclicConv2D通过继承 Keras 的layer.Layer类来实现我自己的层,如here所述有没有更直接的选择,或者我应该首先解决的信息来源?
否则,我在哪里可以找到如何实施前者的任何建议?
对于后者,我必须承认,我更多地描述它是为了激发一些集体思考如何从用户的角度实现它,但我真的觉得不能贡献一个好的拉取请求(即一个包括好的代码)。无论如何,我会很感激任何从哪里开始的建议。
我正在实现类似的东西,所以尽管我会添加代码。我认为实际实现包装填充的最简单方法是使用带有“wrap”选项的Numpy pad 函数。例如与
input = np.array([[1,2,3],[4,5,6],[7,8,9]])\nkernel = [1,1]\n#We want symmetrical padding (same top and bottom)\n# and np.pad format ((before_1, after_1), \xe2\x80\xa6 (before_N, after_N))\npad = [[i,i] for i in kernel]\npadded_input = np.pad(input, pad, "wrap")\nRun Code Online (Sandbox Code Playgroud)\n\n这使,
\n\narray([[9, 7, 8, 9, 7],\n [3, 1, 2, 3, 1],\n [6, 4, 5, 6, 4],\n [9, 7, 8, 9, 7],\n [3, 1, 2, 3, 1]])\nRun Code Online (Sandbox Code Playgroud)\n\n看起来创建一个类似于ZeroPadding2D 的自定义层(称为类似的东西)CyclicPadding2D可能是最小化 Keras 代码更改的最佳想法,如下所示,
kernel = [7,7]\nmodel = Sequential()\nmodel.add(CyclicPadding2D(kernel, input_shape=(224, 224, 3)))\nmodel.add(Conv2D(32, kernel=kernel, padding="valid"))\nmodel.build()\nRun Code Online (Sandbox Code Playgroud)\n\n您还可以在池化层和转换层之间使用它。中的代码CyclicPadding2D可能需要考虑输入格式(通道、批次等),例如:
if self.data_format is "channels_last":\n #(batch, depth, rows, cols, channels)\n pad = [[0,0]] + [[i,i] for i in self.kernel] + [[0,0]]\nelif self.data_format is "channels_first":\n #(batch, channels, depth, rows, cols)\n pad = [[0, 0], [0, 0]] + [[i,i] for i in self.kernel]\ninputs = np.pad(inputs, pad, "wrap")\nRun Code Online (Sandbox Code Playgroud)\n\n这类似于 Keras Numpy 后端使用硬连线选项“constant”所做的事情,而张量流后端不提供任何选项,因此默认为常量(尽管有趣的是tf.pad提供了一个 Reflect选项)。
查看 Keras 源代码,也许可以将类似的内容添加为功能,只需将上面的代码放入当填充选项类似于“周期性”时的调用函数中即可。_conv也就是说,简单地添加一个新的填充层可能是最灵活的解决方案。
| 归档时间: |
|
| 查看次数: |
1330 次 |
| 最近记录: |