当前位置:   article > 正文

基于深度学习的回归预测课程介绍_深度学习回归预测模型

深度学习回归预测模型

一.内容介绍

本文以航空发动机从运行到下发过程中的模拟数据集为研究对象,以计算机的模拟计算为主要方式,旨在构建基于深度学习的航空发动机RUL预测模型,结合机器学习技术和背景专业知识,实现智能化预测。
主要分为两个部分:

1.第一部分是数据预处理,包括参数筛选和滤波平滑处理。

(1)参数筛选:首先对单工况与多工况的数据集构建测量性能监测参数进行筛选,从所有可用的特性中选择有用的条件指标是构建可靠的RUL预测模型的第一步,方法1,计算各个发动机性能变化的的线性回归模型,并利用各性能参数回归模型的斜率绝对值大小来对单工况与多工况下的性能监测参数进行筛选,选出具有单调增长或下降态势的退化参数,方法2,为准确的RUL预测提供了三个特征选择指标:单调性、趋势性和预测性,这些指标将已确定的条件指标按0到1的范围进行排序,高阶特征可以更可靠地跟踪退化过程,因此更适合训练RUL预测模型,在后面的内容中,会详细的对这三个函数进行讲解。
(2)滤波平滑和归一化处理:由于获得的发动机退化参数存在着噪声干扰和随机性波动问题,使用一维数字滤波器对退化参数进行滤波处理,清除数据中的噪声,采用局部加权回归(Lowess)来平滑数据,弱化退化数据中的随机波动,提高RUL预测的准确度,采用归一化缩放方式,将数据缩放至0—1之间,消除每台发动机退化数据中维度和大小不统一的问题,利用上述方法分别对发动机的训练数据和试验数据进行了处理。
(3)注意:对于CMAPSS中的多工况的数据,由于其变化过程相比较与单工况的数据较为复杂,在后面的章节中会单独拿出来进行介绍和处理。

2.第二部分是建立以深度学习为基础的航空发动机RUL预测模型

根据训练数据建立以深度学习为基础的航空发动机RUL预测模型,最后依照测试数据集对所建立的模型进行测试,得出最终的RUL预测结果,检验模型的稳定性和准确性,完成以深度学习为基础的RUL的预测研究。其中用到的模型有循环神经网络模型——RNN(递归神经网络模型)、LSTM(长短期记忆神经网络模型)、BLSTM(双向长短期记忆神经网络模型)、GRU(门控循环单元)和BGRU(双向门控循环单元);卷积神经网络模型(CNN);注意力机制——自注意力机制、残差自注意力机制和多头自注意力机制;CNN-循环神经网络模型的混合模型;基于注意力机制的深度混合模型;Transformer模型。

二.软件说明

本文的深度学习部分均采用的Pytorch编程。对于数据预处理部分,如参数筛选、参数的滤波和平滑处理以及后面对多工况数据的工况聚类划分以及Z-score标准化处理,均由MATLAB实现。
如果你只是想学习并了解深度学习的编程,我会把用到的数据打包并处理好上传,大家只需要看深度学习部分的编程即可。

三.各个章节的内容说明

为了帮助大家更好地理解模型,每个章节介绍的时候都会依从原理介绍+实操代码的原则。

四.特别说明

真正了解了深度学习之后,你就会发现不同模型的构建以及拼接就如同搭积木一样——通俗点说就是对应好不同模型的输入跟输出,你的模型就能跑的通。然而pytorch的不足之处在于没法直接展示所搭建的模型的各个参数值,本人通过重建模型法可实现各个不同模型之间的参数变化的可视化展示。以CNN 模型为例子,输入的尺寸为三维(3000,50,17),经过卷积计算、池化计算以及全连接层之后的变化过程可视化代码如下:

#%%
from sklearn.preprocessing import MinMaxScaler,StandardScaler
from sklearn.metrics import mean_absolute_error as MAE
from sklearn.metrics import mean_squared_error as MSE
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from tqdm import tqdm
import seaborn as sns
import pickle
import torch.nn as nn
import torch.nn.functional as F
import torch
import shutil
seed=1
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')#使用GPU CPU
#device = 'gpu'
torch.manual_seed(seed)#随机情况
print("当前设备:",device)

fcNodes = 100

x = torch.randn(3000, 50, 17)
print("输入尺寸",x.shape)
x = x.permute(0, 2, 1)
print("经过转置后的尺寸",x.shape)
x = nn.Conv1d(17, 100, stride=1, padding=0, kernel_size=48)(x)
print("经过卷积层后的尺寸",x.shape)

x = nn.MaxPool2d(2, stride=1)(x)
print("经过池化层后的尺寸",x.shape)
x = x.permute(0, 2, 1)
print("经过转置后的尺寸",x.shape)

x = x.contiguous().view(-1, 198)
print("转换成二维的尺寸",x.shape)
x = nn.Linear(198, 100)(x)
print("经过第一个全连接的尺寸",x.shape)
x = nn.Linear(100, 1 * 1)(x)
print("经过第二个全连接的尺寸",x.shape)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

最终的输出结果为:

输入尺寸 torch.Size([3000, 50, 17])
经过转置后的尺寸 torch.Size([3000, 17, 50])
经过卷积层后的尺寸 torch.Size([3000, 100, 3])
经过池化层后的尺寸 torch.Size([3000, 99, 2])
经过转置后的尺寸 torch.Size([3000, 2, 99])
转换成二维的尺寸 torch.Size([3000, 198])
经过第一个全连接的尺寸 torch.Size([3000, 100])
经过第二个全连接的尺寸 torch.Size([3000, 1])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

通过清晰明了的可视化,就可以帮助我们更好地搭建深度学习模型,只要对应好输入跟输出,代码就能跑的通!

五.基于MATLAB 将C-MAPSS zip格式中的数据输出到excel中

基于pytorch的深度学习模型的输入,本文采用的是读取EXCEL的格式,代码如下所示:

#%%
from sklearn.preprocessing import MinMaxScaler,StandardScaler
from sklearn.metrics import mean_absolute_error as MAE
from sklearn.metrics import mean_squared_error as MSE
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from tqdm import tqdm
import seaborn as sns
import pickle
import torch.nn as nn
import torch.nn.functional as F
import torch
import shutil

### 超参数设置
#输入列
# inCols = ['循环数','setting1', 'setting2', 'setting3', 's1', 's2', 's3',
#           's4', 's5', 's6', 's7', 's8', 's9', 's10', 's11', 's12', 's13', 's14',
#           's15', 's16', 's17', 's18', 's19', 's20', 's21']
inCols = ['循环数','setting1', 'setting2', 's2', 's3',
          's4','s6','s7','s8' ,'s9', 's11','s12', 's13', 's14',
          's15', 's17', 's20', 's21']

#输出列
outCols = ['剩余寿命']
#输入时间步
inStep = 50
#输出时间步
outStep = 1
#LSTM节点数
lstmNodes = 90
#CNN节点数
cnnNodes = 100
#全连接层节点数
fcNodes = 100
#学习率
lr = 1e-4
#批处理量
batchSize = 4000
#训练次数
epochs =1200
#随机种子
seed=1

#%% md
"""
import torch
print(torch.__version__)

print(torch.version.cuda)
print(torch.backends.cudnn.version())
"""


### pytorch设置

device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')#使用GPU CPU
#device = 'gpu'
torch.manual_seed(seed)#随机情况
print("当前设备:",device)

### 读取数据

# %%

trainData = pd.read_excel("pinghua130train_FD001.xlsx")
testData = pd.read_excel("pinghuatest_FD001.xlsx")
trainData.head()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

因此,需要将原始数据C-MAPSS zip格式中的数据输出到excel中,数据处理采用MATLAB,具体操作步骤如下(不用担心,我会上传处理好的数据):

步骤1.发动机退化模拟数据集下载到一个名为“CMAPSSData.zip”的文件中,并将其解压缩到当前目录中名为“data”的文件夹中。

filename = "CMAPSSData.zip";
if ~exist(filename,'file')
    url = "https://ti.arc.nasa.gov/c/6/";
    websave(filename,url);
end

dataFolder = "data";
if ~exist(dataFolder,'dir')
    mkdir(dataFolder);
end
unzip(filename,dataFolder)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

步骤2.把table转化为excel,需要注意的是,vertcat只能转化一列,因此先把剩余寿命那一列拆开

file = fullfile(dataFolder,"train_FD002.txt");%提取训练集

rawTrain_x = localLoadData(file);   %获得训练的输入项
C_x = table2cell(rawTrain_x)  %将table转化为cell
out_x = vertcat(C_x{:});   %将cell转化为excel

rawTrain_y = localLoadData1(file); 
C_y = table2cell(rawTrain_y)  %将table转化为cell
out_y = vertcat(C_y{:})+1;   %将cell转化为excel
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

步骤3.将out_xout_y复制到excel中。

六.总结

是深度学习使得你我相遇在CSDN中,回顾我自己在深度学习领域中的学习经历,确实走了不少弯路,自己也迷茫过,不知道如何下手,整天看着花里胡哨的论文,更不知道自己该从哪里下手。首先,感谢大家的信任!!!请大家放心,我定会把我对深度学习的所学(代码源码)传授给大家!!!希望我的这个小课程可以给你带来一些小惊喜(如果有些许意外,我会吸取大家的意见!!!积极改正),也希望我的课程能给你的科研带来一些帮助,当然更希望我的课程能帮助大家更好地入门深度学习。在下非计算机科班出身,有些说的不通透的地方希望大家谅解,当然我会尽全力给大家整理好每一章的内容,最最最关键的,代码请大家放心,我会原版的搬出与你们共享。说些题外话,大家科研之余也要适当的娱乐,要知道劳逸结合,多多锻炼身体。最后的最后,祝我们大家都得偿所愿!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/615168
推荐阅读
相关标签
  

闽ICP备14008679号