主要内容

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

深層学習を使用したsequence-to-sequence回帰

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

時系列データまたはシーケンスデータから数値を予測するよう深層ニューラルネットワークに学習させるために,長短期記憶(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 -サイクル単位の時間

  • 列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からデータを抽出し,细胞配列XTrainおよびYTrainを返します。これらの细胞配列には,学習予測子と応答シーケンスが含まれています。

filenamePredictors = fullfile (dataFolder,“train_FD001.txt”);[XTrain, YTrain] = processTurboFanDataTrain (filenamePredictors);

定数値を持つ特徴の削除

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

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

シーケンスに含まれている残りの特徴の数を表示します。

numFeatures =大小(XTrain {1}, 1)
numFeatures = 17

学習予測子の正規化

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

μ=意味着([XTrain {:}), 2);sig =性病([XTrain {}):, 0, 2);i = 1:numel(XTrain) XTrain{i} = (XTrain{i} - mu) ./ sig;结束

応答のクリップ

エンジンが故障に近いときのシーケンスデータから詳しく学習するために,しきい値150で応答をクリップします。これによって,ネットワークは荷重软化値がこれより高いインスタンスを等価として処理します。

用力推= 150;i = 1:numel(YTrain) YTrain{i}(YTrain{i} > thr) = thr;结束

次の図は,最初の観測値と対応するクリップされた応答を示しています。

パディング用のデータの準備

ミニバッチに追加するパディングの量を最小限に抑えるために,シーケンス長で学習データを並べ替えます。さらに,学習データを等分するミニバッチサイズを選択し,ミニバッチ内のパディングの量を減らします。

シーケンス長で学習データを並べ替えます。

i=1:numel(XTrain)序列= XTrain{i};sequenceLengths (i) =(序列,2)大小;结束[sequenceLengths, idx] =排序(sequenceLengths,“下”);XTrain = XTrain (idx);YTrain = YTrain (idx);

並べ替えられたシーケンス長を棒グラフで表示します。

图酒吧(sequenceLengths)包含(“序列”) ylabel (“长度”)标题(“排序数据”

学習データを等分するミニバッチサイズを選択し,ミニバッチ内のパディングの量を減らします。ミニバッチサイズとして20を指定します。この図は,並べ替えていないシーケンスと並べ替えたシーケンスに追加されたパディングを示しています。

miniBatchSize = 20;

ネットワークアーキテクチャの定義

ネットワークアーキテクチャの定義。200年隠れユニットが個あるLSTM層と,その後に続くサイズが50の全結合層とドロップアウトの確率0.5がのドロップアウト層で構成されたLSTMネットワークを作成します。

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

学習オプションを指定します。ソルバー“亚当”を使用して,サイズ20のミニバッチで60エポックの学習を行います。学習率0.01をに指定します。勾配の発散を防ぐために,勾配のしきい値を1に設定します。シーケンスを長さで並べ替えられた状態に保つために,“洗牌”“永远”に設定します。

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

ネットワークの学習

trainNetworkを使用してネットワークに学習させます。

网= trainNetwork (XTrain、YTrain层,选择);

ネットワークのテスト

この例に添付されている関数processTurboFanDataTestを使用してテストデータを準備します。関数processTurboFanDataTestfilenamePredictorsおよびfilenameResponsesからデータを抽出し,细胞配列XTestおよび欧美を返します。これらの细胞配列には,テスト予測子と応答シーケンスがそれぞれ含まれています。

filenamePredictors = fullfile (dataFolder,“test_FD001.txt”);filenameResponses = fullfile (dataFolder,“RUL_FD001.txt”);[XTest,欧美]= processTurboFanDataTest (filenamePredictors filenameResponses);

学習データから計算されたidxConstantを使用して定数値を持つ特徴を削除します。学習データと同じパラメーターを使用してテスト予測子を正規化します。学習データに使用したのと同じしきい値でテストの応答をクリップします。

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

预测を使用してテストデータについて予測を実行します。この関数がデータにパディングを追加するのを防ぐために,ミニバッチサイズを1に指定します。

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

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

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

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

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

与えられた部分シーケンスについて,予測された現在の荷重软化は予測シーケンスの最後の要素です。予測の平方根平均二乗誤差(RMSE)を計算し,予測誤差をヒストグラムで可視化します。

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

参考文献

  1. 萨克斯纳,阿比纳夫,凯·戈贝尔,唐·西蒙,尼尔·埃克隆德。"飞机发动机从运行到故障的损伤传播模型"在预测与健康管理,2008年。2008年榜单。国际会议上1 - 9页。IEEE 2008。

  2. 萨克森,阿比纳夫,凯·戈贝尔。涡扇发动机退化模拟数据集NASA Ames预诊数据仓库https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/NASA艾姆斯研究中心,加州莫菲特菲尔德

参考

||||

関連するトピック