最小(非)工作示例
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。
2条答案
按热度按时间uurv41yg1#
目前(@最新稳定版本- 1.9.0)Pytorch缺少对复Tensor的此类操作的支持(这是一个测试版特性)。
将真实的图和虚图分别分解为卷积,虽然不是很理想,但这是目前要走的路。
wgxvkvu92#
Pytorch越来越多地增加了对复数的支持。
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的理论,所以