轴承故障诊断,CDAE之后加傅里叶变换FFT,然后输入到BiLSTM中去,这个傅里叶变换该怎么加。

轴承故障诊断,CDAE之后加傅里叶变换FFT,然后输入到BiLSTM中去,这个傅里叶变换不会加。

data, target = encoder(data.to(device)), target.to(device)

data=torch.fft.fft(data)

pred,_ = model(data)

直接在CDAE的encoder之后对data数据加傅里叶变换torch.fft.fft会报错expected scalar type ComplexDouble but found Double

基于Newbing的编写参考,有用望采纳!:

傅里叶变换后得到的是复数类型的结果,而CDAE的encoder输出的是Double类型的数据,所以直接在CDAE的encoder之后对data数据加傅里叶变换会出现类型不匹配的错误。

解决办法是先将Double类型的数据转换为复数类型,再进行傅里叶变换,代码如下:

# 将Double类型的数据转换为复数类型
data_complex = data.to(torch.complex64)

# 对复数类型的数据进行傅里叶变换
data_fft = torch.fft.fft(data_complex)

# 将傅里叶变换后的结果转换为Float类型
data_fft = data_fft.to(torch.float32)

接着再将data_fft作为BiLSTM的输入即可。注意要根据具体情况调整数据类型和维度等参数,以确保模型能够正常运行并取得好的效果。

expected scalar type ComplexDouble but found Double
应为标量类型ComplexDouble,但找到Double

根据中文报错释义和题意分析,问题可能出现在 data 变量的数据类型上。如果 data 是一个 torch.Tensor 对象,则需要将其转换为 torch.ComplexDouble 类型才能应用 torch.fft.fft 函数进行傅里叶变换。因此,需要使用以下代码将 data 转换为复数类型:
data = data.type(torch.ComplexDouble)  
data = torch.fft.fft(data)
另外,还需要确保在将 data 和 target 变量传递到模型之前,它们都被转换为了相同的类型。如果 target 变量也是一个 torch.Tensor 对象,则需要将其转换为与 data 相同的类型。例如:
target = target.type(torch.ComplexDouble)  
pred, _ = model(data)