1、
旧版中 pytorch.rfft 函数与新版 pytorch.fft.rfft 函数对应修改问题
旧版:
fft = torch.rfft(input, 2, normalized=True, onesided=False)
# input 为输入的图片或者向量,dtype=torch.float32,size比如为[1,3,64,64]
新版
可以看到这里也有rfft,官方文档说是用来处理都是实数的输入。但是它在前面的warning中说了是one-side,而我们要的是two-side。此外实数也可以看作是虚部都为0的复数,所以用fft没问题。
新版的rfft和fft都是用于一维输入,而我们的图像是二维,所以应该用rfft2和fft2。在fft2中,参数dim用来指定用于傅里叶变换的维度,默认(-2,-1),正好对应H、W两个维度。
新版所有的fft都不将复数 z = a + b j z=a+bjz=a+bj 存成二维向量了,而是一个数 [ z = a + b j ] [z=a+bj][z=a+bj]。所以如果要跟旧版中一样存成二维向量,需要用.real()和.imag()提取复数的实部和虚部,然后用torch.stack()堆到一起,即可。
————————————————
版权声明:本文为CSDN博主「带鱼的鱼香肉丝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43169650/article/details/121717208
import torch
input = torch.rand(1,3,32,32)
# 旧版pytorch.rfft()函数
fft = torch.rfft(input, 2, normalized=True, onesided=False)
# 新版 pytorch.fft.rfft2()函数
output = torch.fft.fft2(input, dim=(-2, -1))
output = torch.stack((output.real, output_new.imag), -1)
2、torch.irfft用法:torch.
irfft
(input, signal_ndim, normalized=False, onesided=True, signal_sizes=None) → Tensor
try:定义新函数
def rfft(x, d):
t = torch.fft.fft(x, dim = (-d))
r = torch.stack((t.real, t.imag), -1)
return r
def irfft(x, d):
t = torch.fft.ifft(torch.complex(x[:,:,0], x[:,:,1]), dim = (-d))
return t.real
改:
# Vc = torch.rfft(v, 1, onesided=False)
Vc = rfft(v, 1)
# v = torch.irfft(V, 1, onesided=False)
v = irfft(V, 1)
3、看torch版本
import torch
torch.__version__
torch.cuda.is_available ()
标签:torch,False,07,fft,pytorch,22.11,rfft,input From: https://www.cnblogs.com/lixinyu0310/p/16866027.html