pytorch支持复数吗?

6ss1mwsb  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(594)

最小(非)工作示例

kernel = Conv2d(in_channels=1, out_channels=1, kernel_size=(3, 2))
data = torch.rand(1, 1, 100, 100).type(torch.complex64)
kernel(data)

对于64位和128位复数,得到RuntimeError: "unfolded2d_copy" not implemented for 'ComplexDouble',而对于32位复数,得到RuntimeError: "copy_" not implemented for 'ComplexHalf'
是我遗漏了什么,还是pytorch遗漏了对复数的支持??
注:我使用的是macbook,只使用cpu。

uurv41yg

uurv41yg1#

目前(@最新稳定版本- 1.9.0)Pytorch缺少对复Tensor的此类操作的支持(这是一个测试版特性)。
将真实的图和虚图分别分解为卷积,虽然不是很理想,但这是目前要走的路。

wgxvkvu9

wgxvkvu92#

Pytorch越来越多地增加了对复数的支持。

  • 自v1.6(2020年7月28日)起,pytorch现在支持复向量和复梯度作为BETA(我认为自v1.9起不再作为BETA)。
  • 自v1.12(2022年6月28日)起,在PyTorch中增加了对Complex32和复杂卷积的支持(也称为BETA)。

PyTorch现在原生支持复数、复数autograd、复数模块和许多复杂运算,包括线性代数和快速傅立叶变换许多库,包括torchaudio和ESPNet,已经在PyTorch中使用了复数,PyTorch1.12进一步扩展了复卷积的复功能,实验复32(“复数半”)数据类型,支持半精度FFT运算。由于CUDA 11.3软件包中存在缺陷,如果您使用复数,我们建议您使用来自Wheels的CUDA 11.6软件包。
确实存在用于实现复值神经网络(CVNN)的第三方库:
我相信如果你想使用Pytorch的话,最好的库是ComplexPytorch
如果您更喜欢Tensorflow,我向您推荐我自己的library,它使用Tensorflow作为后端,我模拟(或至少尝试模拟)TensorFlow API和UX。
最后,我会推荐这个paper,代码使用了Theano,它已经不再维护,但是它有很多关于如何实现CVNN的理论,所以

相关问题