主要内容

이번역페이지는최신내용을담고있지않습니다。최신내용을문으로보려면여기를클릭하십시오。

딥러닝을사용한序列对序列회귀

이예제에서는딥러닝을사용하여엔진의잔여수명(rul)을예측하는방법을보여줍니다。

시계열또는시퀀스데이터로부터숫자형값을예측하도록심층신경망을훈련시키기위해장단기기억(LSTM)신경망을사용할수있습니다。

이예제에서는[1]에서설명한涡扇发动机退化仿真数据集를사용합니다。이예제에서는엔진의여러센서를나타내는시계열데이터를준다음,예측정비관점에서엔진의잔여수명(단위:주기)을예측하도록LSTM신경망을훈련시킵니다。훈련데이터는엔진100개의시뮬레이션된시계열데이터를포함합니다。각시퀀스는길이가다양하며,하나의완전한RTF(运行失败)인스턴스에대응됩니다。테스트데이터는100개의부분시퀀스를포함합니다。각시퀀스의마지막에는잔여수명에대응되는값이포함됩니다。

데이터세트는100개의훈련관측값과100개의테스트관측값을포함합니다。

데이터다운로드하기

https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/[2]에서涡扇发动机退化仿真数据集를다운로드하고압축을풉니다。

涡扇发动机退化模拟데이터세트의각시계열은서로다른엔진을나타냅니다。각엔진은알려지지않은초기마모및제작편차가있는상태에서구동되기시작합니다。각시계열의시작시에엔진은정상적으로동작하며,시계열의어느시점에서결함이발생합니다。훈련세트에서결함의크기는시스템결함이발생할때까지커집니다。

데이터는공백으로구분된26개숫자열의형태로압축텍스트파일에들어있습니다。각행은1회의동작주기동캡처한데이터스냅샷이고,각열은다른변수입니다。열은다음에대응됩니다。

  • 1열-유닛번호

  • 2 .열-시간(단위:주기)

  • 3-5열—동작설정

  • 6-26열-센서측정값1-21

涡扇发动机退化模拟데이터세트를저장할디렉터리를만듭니다。

dataFolder = fullfile(tempdir,“涡扇”);如果~存在(dataFolder“dir”mkdir (dataFolder);结束

https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/에서涡扇发动机退化仿真数据集를다운로드하고추출합니다。

파일CMAPSSData.zip에서데이터의압축을풉니다。

文件名=“CMAPSSData.zip”;解压缩(文件名,dataFolder)

훈련데이터준비하기

이예제에첨부된함수processTurboFanDataTrain을사용하여데이터를불러옵니다。함수processTurboFanDataTrainfilenamePredictors에서데이터를추출하고,훈련예측변수시퀀스와응답변수시퀀스를포함하는셀형배열XTrainYTrain을반환합니다。

fileamepredictors = fullfile(数据文件夹,“train_FD001.txt”);[XTrain,YTrain] = processTurboFanDataTrain(filenamePredictors);

상수값을갖는특징제거하기

모든시간스텝에대해변하지않는특징은훈련의성능을저하할수있습니다。동일한최솟값과최댓값을갖는데이터행을찾아서제거합니다。

m = min([XTrain{:}],[],2);M = max([XTrain{:}],[],2);idxConstant = M == M;i = 1: number (XTrain) XTrain{i}(idxConstant,:) = [];结束

시퀀스에남아있는특징의개수를봅니다。

numFeatures = size(XTrain{1},1)
numFeatures = 17

훈련예측변수정규화하기

훈련예측변수가평균0과단위분산을갖도록정규화합니다。모든관측값에대해평균과@ @준편차를계산하려면시퀀스데이터를가로로결합하십시오。

mu = mean([XTrain{:}],2);sig = std([XTrain{:}],0,2);i = 1: number (XTrain) XTrain{i} = (XTrain{i} - mu) ./ sig;结束

응답변수자르기

엔진결함이임박했을때시퀀스데이터로부터더많이학습할수있도록응답변수를임계값150에서자르십시오。이렇게하면신경망이이보다더높은rul값을갖는스턴스들을동일하게처리합니다。

THR = 150;i = 1:数字(YTrain) YTrain{i}(YTrain{i} > thr) = thr;结束

이그림에서는첫번째관측값과여기에대응하는잘린응답변수를보여줍니다。

채우기를위해데이터준비하기

미니배치에추가되는채우기의양을최소화하려면시퀀스길이를기준으로훈련데이터를정렬하십시오。그런다음훈련데이터를균등하게나누고미니배치의채우기양을줄이는미니배치크기를선택합니다。

시퀀스길이를기준으로훈련데이터를정렬합니다。

i=1:数字(XTrain)序列= XTrain{i};sequenceLengths(i) = size(sequence,2);结束[sequenceLengths,idx] = sort(sequenceLengths, idx)“下”);XTrain = XTrain(idx);YTrain = YTrain(idx);

정렬된시퀀스길이를막대차트로@ @시합니다。

xlabel(“序列”) ylabel (“长度”)标题(“排序数据”

훈련데이터를균등하게나누고미니배치의채우기양을줄이는미니배치크기를선택합니다。미니배치크기를20으로지정합니다。이그림에서는정렬된시퀀스와정렬되지않은시퀀스에더해진채우기를보여줍니다。

miniBatchSize = 20;

신경망아키텍처정의하기

신경망아키텍처를정의합니다。은닉유닛200개를갖는LSTM계층,크기가인50완전연결계층,드롭아웃확률0.5인이드롭아웃계층으로구성된LSTM신경망을만듭니다。

numResponses = size(YTrain{1},1);numHiddenUnits = 200;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”“序列”) fullyConnectedLayer(50) dropoutLayer(0.5) fullyConnectedLayer(numResponses) regressionLayer];

훈련옵션을지정합니다。솔버“亚当”20인을사용하여크기가미니배치로구성된时代60회에대해훈련을진행합니다。학습률을0.01로지정합니다。기울기가한없이가하지않도록하려면기울기임계값을1로설정하십시오。시퀀스가길이를기준으로정렬된상태를유지하도록하려면“洗牌”“永远”로설정하십시오。

maxEpochs = 60;miniBatchSize = 20;选项= trainingOptions(“亚当”...“MaxEpochs”maxEpochs,...“MiniBatchSize”miniBatchSize,...“InitialLearnRate”, 0.01,...“GradientThreshold”, 1...“洗牌”“永远”...“阴谋”“训练进步”...“详细”, 0);

신경망훈련시키기

trainNetwork를사용하여신경망을훈련시킵니다。

net = trainNetwork(XTrain,YTrain,图层,选项);

신경망테스트하기

이예제에첨부된함수processTurboFanDataTest를사용하여테스트데이터를준비합니다。함수processTurboFanDataTestfilenamePredictorsfilenameResponses에서데이터를추출하고,각각훈련예측변수시퀀스와응답변수시퀀스를포함하는셀형배열XTest欧美를반환합니다。

fileamepredictors = fullfile(数据文件夹,“test_FD001.txt”);fileameresponses = fullfile(数据文件夹,“RUL_FD001.txt”);[XTest,YTest] = processTurboFanDataTest(filenamePredictors, filenamerresponses);

훈련데이터로부터계산한idxConstant를사용하여상수값을갖는특징을제거합니다。훈련데이터와동일한파라미터를사용하여테스트예측변수를정규화합니다。훈련데이터에사용된임계값과동일한임계값에서테스트응답변수를자릅니다。

i = 1: number (XTest) XTest{i}(idxConstant,:) = [];XTest{i} = (XTest{i} - mu) ./ sig;YTest{i} > thr) = thr;结束

预测를사용하여테스트데이터에대해예측을수행합니다。함수가데이터에채우기를추가하지않도록하려면미니배치크기를1로지정하십시오。

YPred =预测(net,XTest,“MiniBatchSize”1);

LSTM신경망은한번에시간스텝하나씩부분시퀀스에대해예측을수행합니다。각시간스텝마다신경망은이번시간스텝의값과이전시간스텝들로부터계산한신경망상태만을사용하여예측을수행합니다。신경망은각예측사이에신경망상태를업데이트합니다。预测함수는이러한예측으로구성된시퀀스를반환합니다。예측의마지막소는해당부분시퀀스에대해예측된rul에대응합니다。

또는predictAndUpdateState를사용하여한번에시간스텝하나씩예측을수행할수도있습니다。이방법은시간스텝의값이스트림으로수신되는경우에유용합니다。일반적으로한번에시간스텝하나씩예측을수행하는것보다전체시퀀스에대해예측을수행하는것이빠릅니다。단일시간스텝예측들사이에서신경망을업데이트하여미래의시간스텝을전망하는방법에대한예제는딥러닝을사용한시계열전망항목을참조하십시오。

예측중일부를플롯으로시각화합니다。

idx = randperm(数字(YPred),4);数字i = 1:数字(idx) subplot(2,2,i) plot(YTest{idx(i)},“——”)举行情节(YPred {idx (i)},“。”)举行Ylim ([0 THR + 25])“试验观察”+ idx(i)) xlabel(“时间步”) ylabel (“原则”结束传奇([“测试数据”“预测”],“位置”“东南”

주어진부분시퀀스에서예측된현재rul은예측된시퀀스의마지막소입니다。예측의RMSE(제곱평균제곱근오차)를계산하고,예측오차를히스토그램으로시각화합니다。

i = 1:numel(YTest) YTestLast(i) = YTest{i}(end);YPredLast(i) = YPred{i}(end);结束图rmse =√(mean(YPredLast - YTestLast).^2)直方图(YPredLast - YTestLast)" rmse = "+ rmse) ylabel(“频率”)包含(“错误”

참고 문헌

  1. Saxena, Abhinav, Kai Goebel, Don Simon和Neil Eklund。飞机发动机运行故障模拟的损伤传播模型。在《预测与健康管理》,2008年。2008年榜单。国际环境保护会议,第1-9页。IEEE 2008。

  2. Saxena, Abhinav, Kai Goebel。涡扇发动机退化仿真数据集NASA艾姆斯预测数据仓库https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/美国宇航局艾姆斯研究中心,莫菲特场,加利福尼亚州

참고 항목

||||

관련 항목