主要内容

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

树莓派でのLSTMネットワ,クのコ,ド生成

この例では,手臂®计算库を使用する事前学習済みの長短期記憶(LSTM)ネットワークのコードを生成し,そのコードを覆盆子π™ターゲットに展開する方法を示します。この例では,lstmネットワ,クはマシンの残存耐用期間(rul)を予測します。このネットワ,クは,エンジンのさまざまなセンサ,を表す時系列デ,タセットを入力として受け取ります。ネットワクは,サクル単位で測定されるエンジンの残存耐用期間を出力として返します。

この例では,[1]に記載のある涡扇发动机退化仿真数据集を使用します。このデタセットには100個の学習観測値と100個のテスト観測値が含まれています。学習デ,タには,100個のエンジンのシミュレ,トされた時系列デ,タが含まれています。各シーケンスには17個の特徴があり,長さはさまざまで,故障するまで使用(RTF)した事例全体に対応します。100年テストデータには個の部分シーケンスと,各シーケンスの最後における対応する残存耐用期間の値が含まれています。

この例では,事前学習済みのLSTMネットワ,クを使用します。LSTMネットワクに学習させる方法の詳細にいては,深層学習を使用したシ,ケンスの分類(深度学习工具箱)の例を参照してください。

この例では,lstmネットワ,クを使用して予測を実行する2通りの方法を示します。

  • 1つ目の方法では,標準のLSTMネットワークを使用して,一連の時系列データに対して推論を実行します。

  • 2 .。この方法では,データのタイムステップを1つずつ渡して,タイムステップごとにネットワークの状態を更新します。

この例では,pilベスのワクフロを使用してmex関数を生成します。この関数は,ターゲットハードウェアで生成された実行可能ファイルをMATLABから呼び出します。

メモ:

  • この例のコ,ド行はコメントアウトされています。例を実行する前にコメントを解除してください。

  • この例で使用する臂计算库のバージョンは,コード生成でサポートされている最新バージョンではない可能性があります。サポトされるコンパラとラブラリのバジョンの詳細にいては,サ,ドパ,ティ製のハ,ドウェアとソフトウェアを参照してください。

  • この例はMATLAB在线ではサポ,トされていません。

前提条件

  • MATLAB®编码器™

  • 嵌入式编码器®

  • 深度学习工具箱™

  • 深度学习库的MATLAB编码器接口。このサポトパッケジをンストルするには,アドオンエクスプロラを使用します。

  • 树莓派硬件的M金宝appATLAB支持包。このサポトパッケジをンストルするには,アドオンエクスプロラを使用します。

  • 树莓派ハ,ドウェア

  • ARM计算库(タ,ゲット,ARMハ,ドウェア上)

  • コンパ▪▪ラおよびラ▪▪ブラリの環境変数。環境変数の設定にいては,環境変数を参照してください。

スタティックラ▪▪ブラリ用のコ▪▪ド生成構成オブジェクトの設定

指定したエントリポイント関数の公益诉讼墨西哥人関数を生成するには,スタティックライブラリ用のコード構成オブジェクトを作成して,検証モードを“公益诉讼”に設定します。タゲット言語をc++に設定します。

% CFG =编码器。Config ('lib', 'ecoder', true);% cfg。VerificationMode = 'PIL';% cfg。TargetLang = ' c++ ';

深層学習コ,ド生成用の構成オブジェクトの設定

编码器。ARMNEONConfigオブジェクトを作成します。计算库のバ,ジョンを指定します。この例では,覆盆子πハードウェアの臂计算库19.05版本がであると仮定します。

% dlcfg = code . deeplearningconfig ('arm-compute');% dlcfg。ArmComputeVersion = '19.05';

コ,ド生成構成オブジェクトのDeepLearningConfigプロパティを深層学習構成オブジェクトに設定します。

% cfg。DeepLearningConfig = dlcfg;

树莓派への接続の作成

树莓派的MAT金宝appLAB支持包のサポ,トパッケ,ジ関数raspiを使用して,树莓派への接続を作成します。次のコ,ドで,置換を行います。

  • raspinameを树莓派の名前で置き換える

  • 用户名をユ,ザ,名で置き換える

  • 密码をパスワ,ドで置き換える

% r = raspi('raspiname','username','password');

树莓派用のコド生成ハドウェアパラメタの設定

树莓派用の编码器。硬件オブジェクトを作成し,それをコ,ド生成構成オブジェクトに付加します。

% hw =编码器。硬件(覆盆子π);% cfg。硬件= hw;

1 .目の方法:LSTMネットワ,クのpil mex関数の生成

この方法では,エントリポrul_lstmnet_predictのコ,ドを生成します。

エントリポ@ @ント関数rul_lstmnet_predict.mは,時系列デ,タセット全体を入力として受け取り,それを予測のためにネットワ,クに渡します。特に,この関数は深層学習を使用したシ,ケンスの分類(深度学习工具箱)の例で学習したLSTMネットワ,クを使用します。この関数は,ネットワ,クオブジェクトをrul_lstmnet.matファesc escルから永続変数に読み込み,以降の予測呼び出しではこの永続オブジェクトを再利用します。sequence-to-sequence LSTMネットワークでは,データシーケンスの個々のタイムステップで異なる予測を行うことができます。

ネットワクアキテクチャの対話的な可視化とネットワク層にいての情報を表示するには,関数analyzeNetwork(深度学习工具箱)を使用します。

类型(“rul_lstmnet_predict.m”
版权所有2019 The MathWorks, Inc. persistent mynet;if isempty(mynet) mynet = code . loaddeeplearningnetwork ('rul_lstmnet.mat');End out = mynet.predict(in);

codegenコマンドを使用してコ,ドを生成するには,関数coder.typeofを使用してエントリポ▪▪ント関数への入力引数の型とサ▪▪ズを指定します。この例では,入力は特徴次元値17と可変のシケンス長をもdoubleのデタ型です。シケンス長を可変サズとして指定して,任意の長さの入力シケンスにいての予測を実行します。

% matrixInput = code .typeof(double(0),[17 Inf],[false true]);

codegenコマンドを実行して,ホストプラットフォ,ムでPILベ,スの,MEX関数rul_lstmnet_predict_pilを生成します。

% codegen -config cfg rul_lstmnet_predict -args {matrixInput} -report

生成されたpil mex関数のテストデタにいての実行

垫子ファeconrルRULTestDataを読み込みます。この垫ファイルには,生成コードをテストできるセンサーの読み取り値のサンプルtimeseriesを含む変数XTestおよび欧美が格納されます。このテストデ,タは,デ,タの前処理後に深層学習を使用したシ,ケンスの分類(深度学习工具箱)の例から取得されます。

负载RULTestData

変数XTestには100個の入力観測値が含まれています。各観測値には17個の特徴があり,シ,ケンス長はさまざまです。

XTest (1:5)
ans =5×1单元格数组{17×31 double} {17×49 double} {17×126 double} {17×106 double} {17×98 double}

変数欧美には,入力変数XTestに対応する100個の出力観測値が含まれています。各出力観測値は,シーケンス全体の各タイムステップデータについてサイクル単位で測定される残存耐用期間(瑞)の値です。

欧美(1:5)
ans =5×1单元格数组{(142 141 140 139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112]} {(146 145 144 143 142 141 140 139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98]} {[150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150150 150 150 149 148 147 146 145 144 143 142 141 140 139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69]} {(150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 149 148 147 146 145 144 143 142 141140 139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82]} {[150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 149 148 147 146 145 144 143 142 141 140 139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91]}

生成されたmex関数rul_lstmnet_predict_pilを乱数テストデ,タセットに対して実行します。

% idx = randperm(数字(XTest), 1);% inputData = XTest{idx};% YPred1 = rul_lstmnet_predict_pil(inputData);

予測とテストデ,タとの比較

プロットを使用してmexの出力デ,タをテストデ,タと比較します。

% figure('Name', 'Standard LSTM', 'NumberTitle', 'off');%的阴谋(欧美{idx},“—”)%坚持%的阴谋(YPred1“。”)%延迟% ylim([0 175])% title("试验观察" + idx)% xlabel("时间步长")% ylabel(“以周期为单位测量的RUL”)

Pilのクリア

% clear rul_lstmnet_predict_pil;

2 .目の方法:ステ,トフルLSTMネットワ,クのpil mex関数の生成

预测にtimeseriesデ,タ全体をすべて一度に渡す代わりに,関数predictAndUpdateStateを使用して,入力デ,タをセグメント単位でストリ,ミングして予測を実行できます。

エントリポ@ @ント関数rul_lstmnet_predict_and_update.mは,単一のタaaplムステップ入力を受け入れ,関数predictAndUpdateState(深度学习工具箱)を使用して処理します。predictAndUpdateStateは,入力タイムステップの予測を返し,入力の後続の部分が同じサンプルの後続のタイムステップとして扱われるようにネットワークを更新します。

类型(“rul_lstmnet_predict_and_update.m”
版权所有2019 The MathWorks, Inc. persistent mynet;if isempty(mynet) mynet = code . loaddeeplearningnetwork ('rul_lstmnet.mat');end [mynet, out] = predictAndUpdateState(mynet, in);结束

codegenコマンドの入力型を作成します。rul_lstmnet_predict_and_updateは呼び出しごとに単一のタイムステップデータを受け入れるため,可変のシーケンス長ではなく固定のシーケンス長1をもつようにmatrixInput入力型を指定します。

% matrixInput = code .typeof(double(0),[17 1]);

codegenコマンドを実行して,ホストプラットフォ,ムでpilベ,スの,mex関数rul_lstmnet_predict_and_update_pilを生成します。

% codegen -config cfg rul_lstmnet_predict_and_update -args {matrixInput} -report

生成されたpil mex関数のテストデタにいての実行

%分别运行生成的MEX函数(|rul_lstmnet_predict_and_update_pil|)inputData序列中的%时间步长数据。% sequenceLength = size(inputData,2);% YPred2 = 0 (1, sequenclength);% for i=1: sequenclength% inTimeStep = inputData(:,i);% YPred2(:, i) = rul_lstmnet_predict_and_update_pil(inTimeStep);%结束

関数rul_lstmnet_predict_and_updateにすべてのタイムステップを1つずつ渡した後,出力結果は,一度にすべての入力を渡した1つ目の方法の出力と同じになります。

予測とテストデ,タとの比較

プロットを使用してmexの出力デ,タをテストデ,タと比較します。

% figure('Name', ' state - full LSTM', 'NumberTitle', 'off');%的阴谋(欧美{idx},“—”)%坚持%的阴谋(YPred2“。”)%延迟% ylim([0 175])% title("试验观察" + idx)% xlabel("时间步长")% ylabel(“以周期为单位测量的RUL”)

Pilのクリア

% clear rul_lstmnet_predict_and_update_pil;

参考文献

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

参考

|||(深度学习工具箱)

関連するトピック