复数卷积 tensorflow_PyTorch 中的傅里叶卷积

本文介绍了傅里叶卷积在数据分析和深度学习中的重要性,详细阐述了卷积定理,并展示了如何在PyTorch中实现傅里叶卷积,与直接卷积进行速度比较,揭示了在处理大内核时傅里叶卷积的高效性。
摘要由CSDN通过智能技术生成
df690e7c1ed3d872b1e278353de8788a.png

欢迎关注 “小白玩转Python”,发现更多 “有趣”

注意: 在这个 Github repo 中提供了1D、2D 和3D Fourier 卷积的完整方法。我还提供了 PyTorch 模块,可以方便地将傅里叶卷积添加到可训练模型中。链接如下:

https://github.com/fkodom/fft-conv-pytorch

卷积

卷积在数据分析中无处不在。几十年来,它们一直被用于信号和图像处理。最近,它们成为现代神经网络的重要组成部分。如果你处理数据的话,你可能会遇到错综复杂的问题。

数学上,卷积表示为:

1e998bbad6b372b7db8326d7ab13778e.png

尽管离散卷积在计算应用程序中更为常见,但在本文的大部分内容中我将使用连续形式,因为使用连续变量来证明卷积定理(下面讨论)要容易得多。之后,我们将回到离散情况,并使用傅立叶变换在 PyTorch 中实现它。离散卷积可以看作是连续卷积的近似,其中连续函数离散在规则网格上。因此,我们不会为这个离散的案例重新证明卷积定理。

卷积定理

从数学上来说,卷积定理可以这样描述:

b38c5f2734ec3445b26f54911eb62f7f.png

其中的连续傅里叶变换是(达到正常化常数) :

78b9368ff02cb4b8956504f91af8bad5.png

换句话说,位置空间中的卷积等价于频率空间中的直乘。这个想法是相当不直观的,但是对于连续的情况来说,证明卷积定理是惊人的容易。要做到这一点,首先要写出等式的左边。

dc9f36dae65d15e91b213d9b48518a7c.png

现在切换积分的顺序,替换变量(x = y + z) ,并分离两个被积函数。

cce93edc4fbaad12c8e77c1deefa8564.png

我们为什么要关心这一切?

因为快速傅里叶变换的算法复杂度低于卷积。直接卷积运算具有复杂度 O(n^2) ,因为在 f 中,我们传递 g 中的每个元素,所以可以在 O(nlogn)时间内计算出快速傅立叶变换。当输入数组很大时,它们比卷积要快得多。在这些情况下࿰

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值