主要内容

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

覆盆子皮での LSTMネットワークのコード生成

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

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

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

この例は、LSTMネットワークを使用して、予測を実行するための 2.つの異なる方法を示しています。

  • 1.番目の方法は、標準の LSTMネットワークを使用し、時系列データのセットに対して推論を実行します。

  • 2.番目の方法は、同じ LSTMネットワークのステートフルな動作を利用します。この方法では、一度にデータの単一のタイムステップを渡し、ネットワークにはタイム ステップごとにその状態を更新させます。

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

メモ:

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

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

  • この例は、MATLABOnlineではサポートされていません。

必要条件

  • MATLAB®编码器™

  • 嵌入式编码器®

  • 深度学习工具箱™

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

  • Raspber金宝appry Pi硬件的MATLAB支持包このサポート パッケージをインストールするには、アドオン エクスプローラーを使用します。

  • 覆盆子皮ハードウェア

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

  • コンパイラおよびライブラリの環境変数。環境変数の設定は、環境変数(MATLAB编码器)を参照してください。

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

指定されたエントリポイント関数に対して PIL-MEX関数を生成するには、スタティック ライブラリのコード構成オブジェクトを作成し、検証モードを '皮尔に設定します。ターゲット言語を C++に設定します。

%cfg=coder.config('lib','ecoder',true);%cfg.VerificationMode='PIL';%cfg.TargetLang='C++';

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

ARMNEONConfig编码器オブジェクトを作成します。计算库のバージョンを指定します。この例では、覆盆子皮ハードウェアの ARM计算库がバージョン 19.05であると想定しています。

%dlcfg=coder.DeepLearningConfig('arm-compute');%dlcfg.ArmComputeVersion='19.05';

コード生成構成オブジェクトの深度学习配置プロパティに、深層学習構成オブジェクトを設定します。

%cfg.DeepLearningConfig=dlcfg;

覆盆子皮への接続の作成

Raspber金宝appry Pi的MATLAB支持包のサポート パッケージ関数拉斯皮を使用して、覆盆子皮への接続を作成します。以下のコードで、次を置き換えます。

  • 树莓名称: 自分の 覆盆子皮の名前

  • 用户名: 自分のユーザー名

  • 暗语: 自分のパスワード

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

覆盆子皮用のコード生成ハードウェア パラメーターの構成

覆盆子皮用の编码器.硬件オブジェクトを作成してコード生成構成オブジェクトに追加します。

%hw=编码器硬件(“树莓Pi”);%硬件=硬件;

1.番目の方法: LSTMネットワークの PIL-MEX関数の生成

この方法では、エントリポイント関数rul_lstmnet_预测のコードを生成します。

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

ネットワーク アーキテクチャの対話的な可視化とネットワーク層についての詳細情報を表示するには、関数分析网络を使用します。

类型(“rul_lstmnet_predict.m”)
函数out=rul_lstmnet_predict(in)%#codegen%版权所有2019年MathWorks,Inc.持久mynet;如果isempty(mynet)mynet=coder.loadDeepLearningNetwork('rullstmnet.mat');end out=mynet.predict(in);

编码基因(MATLAB编码器)コマンドを使用してコードを生成し、関数编码员(MATLAB编码器)を使用してエントリポイント関数への入力引数の型とサイズを指定します。この例では、入力は、特徴次元値 17と可変のシーケンス長をもつ 双重的のデータ型です。シーケンス長を可変サイズとして指定し、任意の長さの入力シーケンスについての予測を実行します。

%matrixInput=coder.typeof(双精度(0),[17 Inf],[false-true]);

编码基因コマンドを実行し、ホスト プラットフォームで 皮尔ベースの 墨西哥関数rul_lstmnet_predict_pilを生成します。

%codegen-config cfg rul\u lstmnet\u predict-args{matrixInput}-报告

テスト データでの生成された PIL-MEX関数の実行

小地毯ファイルRULTestDataを読み込みます。この 小地毯ファイルには、生成コードをテストできるセンサーの読み取り値のサンプル時系列を含む変数克斯特伊泰斯特が保存されます。このテスト データは、データの前処理の後に、深層学習を使用したシーケンスの分類の例から取得します。

负载RULTestData;

変数克斯特には、100個の入力観測値が含まれています。各観測には、シーケンス長が異なる 17の特徴があります。

XTest(1:5)
ans=5×1单元阵列{17×31双}{17×49双}{17×126双}{17×106双}{17×98双}

変数伊泰斯特には、入力変数克斯特に対応する 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 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 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 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]} {[ 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 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]}

生成された 墨西哥関数rul_lstmnet_predict_pilをランダムなテスト データ セットで実行します。

%idx=randperm(numel(XTest),1);%inputData=XTest{idx};%YPred1=rul_lstmnet_predict_pil(输入数据);

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

プロットを使用して 墨西哥の出力データをテスト データと比較します。

%图(“名称”、“标准LSTM”、“编号”、“关闭”);%%绘图(YTest{idx},'-')%等一下%绘图(YPred1,“.-”)%拖延%%ylim([0 175])%标题(“试验观察”+idx)%xlabel(“时间步长”)%ylabel(“以周期为单位测量的RUL”)

皮尔のクリア

%清晰的规则和预测;

2.番目の方法: ステートフルな LSTMネットワークの PIL-MEX関数の生成

時系列データ全体をすべて一度に渡して预测で予測する代わりに、関数预测和更新房地产を使用して入力データをセグメントごとにストリーミングすることで予測を実行できます。

エントリポイント関数rul_lstmnet_predict_和_update.mは、単一のタイムステップ入力を受け入れ、その入力を関数预测和更新房地产を使用して処理します。预测和更新房地产は、入力タイムステップの予測を返し、ネットワークを更新して以降の入力が同じサンプルに続くタイム ステップとして扱われるようにします。

类型('rul_lstmnet_predict_和_update.m')
函数out=rul_lstmnet_predict_and_update(in)%#codegen%版权所有2019年MathWorks,Inc.持久mynet;如果isempty(mynet)mynet=coder.loadDeepLearningNetwork('rullstmnet.mat');end[mynet,out]=predictAndUpdateState(mynet,in);终止

编码基因コマンドの入力タイプを作成します。规则预测和更新は、呼び出しごとに単一のタイムステップ データを受け入れ、入力タイプmatrixInputを、可変のシーケンス長ではなく固定のシーケンス長になるように 1.に指定します。

%matrixInput=编码器类型(双精度(0),[17 1]);

编码基因コマンドを実行して、ホスト プラットフォームで 皮尔ベースの 墨西哥関数rul_lstmnet_predict_和_update_pilを生成します。

%codegen-config cfg rul\u lstmnet\u predict\u和\u update-args{matrixInput}-报告

テスト データでの生成された PIL-MEX関数の実行

%运行生成的MEX函数(| rul_lstmnet_predict_和_update_pil |)%inputData序列中的时间步长数据。%sequenceLength=大小(inputData,2);%YPred2=零(1,序列长度);%对于i=1:sequenceLength%初始化步骤=输入数据(:,i);%YPred2(:,i)=rul lstmnet(预测)和(更新)pil(初始步骤);;%结束

すべてのタイムステップを 1.つずつ関数规则预测和更新に渡した後、結果の出力は、すべての入力を一度に渡した 1.番目の方法の出力と同じになります。

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

プロットを使用して 墨西哥の出力データをテスト データと比較します。

%图('Name','Statefull LSTM','NumberTitle','off');%%%绘图(YTest{idx},'-')%等一下%绘图(YPred2,“.-”)%拖延%%ylim([0 175])%标题(“试验观察”+idx)%xlabel(“时间步长”)%ylabel(“以周期为单位测量的RUL”)

皮尔のクリア

%明确规则、预测和更新规则;

参考文献

[1] Saxena,Abhinav,Kai Goebel,Don Simon和Neil Eklund.“飞机发动机从运行到故障模拟的损伤传播建模”,《预测与健康管理》,2008年。PHM 2008。国际航空发动机会议,第1-9页。IEEE,2008年。

参考

(MATLAB编码器)|(MATLAB编码器)|(MATLAB编码器)|

関連するトピック