主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

深層学習を使用した序列对序列回帰

この例では,深層学習を使用してエンジンの残存耐用期間(rul)を予測する方法を説明します。

時系列データまたはシーケンスデータから数値を予測するよう深層ニューラルネットワークに学習させるために,長短期記憶(LSTM)ネットワークを使用できます。

この例では,[1]に記載のある涡扇发动机退化仿真数据集を使用します。この例では,エンジンのさまざまなセンサーを表す時系列データを与えて,サイクル単位で測定されるエンジンの残存耐用期間を予測(予知保全)するようLSTMネットワークに学習させます。学習デ,タには,100個のエンジンのシミュレ,トされた時系列デ,タが含まれています。各シ,ケンスの長さはさまざまで,故障するまで使用(rtf)した事例全体に対応します。100年テストデータには個の部分シーケンスと,各シーケンスの最後における対応する残存耐用期間の値が含まれています。

デタセットには100個の学習観測値と100個のテスト観測値が含まれています。

デ,タのダウンロ,ド

涡扇发动机退化仿真数据集をhttps://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/[2]からダウンロ,ドして解凍します。

涡扇发动机退化模拟データセットの各時系列は,それぞれ異なるエンジンを表します。開始時点では,各エンジンの初期摩耗の程度や製造上の差異は不明です。各時系列の開始時,エンジンは正常に運転していますが,時系列のある時点で故障が発生します。学習セットでは,システム障害が発生するまで,故障の規模が大きくなります。

このデータには,スペースで区切られた26列の数値のあるzip圧縮されたテキストファイルが含まれています。各行は1回の運転サクルの間に取得されたデタのスナップショットで,各列は異なる変数です。各列は以下に対応します。

  • 列1 -ユニット番号

  • 列2 -サescクル単位の時間

  • 列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/からダウンロ,ドして解凍します。

ファereplicationルCMAPSSData.zipからデ,タを解凍します。

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

学習デ,タの準備

この例に添付されている関数processTurboFanDataTrainを使用してデ,タを読み込みます。関数processTurboFanDataTrainfilenamePredictorsからデ,タを抽出し,单元格配列XTrainおよびYTrainを返します。これらのcell配列には,学習予測子と応答シ,ケンスが含まれています。

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

定数値を持特徴の削除

すべてのタesc escムステップで一定のままである特徴は,学習に悪影響を与える可能性があります。最小値と最大値が同じになるデタの行を見け,それらの行を削除します。

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

学習予測子の正規化

ゼロ平均と単位分散を持ように学習予測子を正規化します。すべての観測値にいて平均値と標準偏差を計算するために,シケンスデタを水平方向に連結します。

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 (“长度”)标题(“排序数据”

学習デタを等分するミニバッチサズを選択し,ミニバッチ内のパディングの量を減らします。ミニバッチサesc escズとして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];

学習オプションを指定します。ソルバ“亚当”を使用して,サaaplズ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を使用してテストデ,タを準備します。関数processTurboFanDataTestfilenamePredictorsおよびfilenameResponsesからデ,タを抽出し,单元格配列XTestおよび欧美を返します。これらのcell配列には,テスト予測子と応答シ,ケンスがそれぞれ含まれています。

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ネットワクは,1タムステップず部分シケンスにいて予測を行います。各タイムステップで,ネットワークは,このタイムステップでの値と前のタイムステップから計算されたネットワークの状態のみを使用して予測を行います。このネットワ,クは,各予測間にその状態を更新します。関数预测は,これらの予測のシ,ケンスを返します。予測の最後の要素は,部分シケンスにいて予測されたrulに対応します。

または,predictAndUpdateStateを使用して1タ▪▪▪▪ムステップず▪▪▪▪▪予測できます。これは,タムステップの値がストリムで到着する場合に役立ます。通常,1タ▪▪ムステップず▪▪予測するよりも,シ▪▪ケンス全体に▪いて予測する方が高速です。1つのタイムステップでの予測間にネットワークを更新して将来のタイムステップを予測する方法を示す例については,深層学習を使用した時系列予測を参照してください。

予測の一部をプロットで可視化します。

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/美国宇航局艾姆斯研究中心,莫菲特场,加利福尼亚州

参考

||||

関連するトピック