Main Content

genFunction

浅層ニューラル ネットワークのシミュレーション用の MATLAB 関数の生成

説明

この関数は、浅層ニューラル ネットワークのシミュレーション用の MATLAB® 関数を生成します。genFunction は、畳み込みネットワークや LSTM ネットワークなどの深層学習ネットワークをサポートしていません。深層学習用のコード生成の詳細は、コード生成を参照してください。

genFunction(net,pathname) は、すべての設定、重みとバイアスの値、モジュール関数、計算が 1 つのファイルに含まれる、ニューラル ネットワークのシミュレーション用の完全にスタンドアロンの MATLAB 関数を生成します。結果は、スタンドアロンの MATLAB 関数ファイルになります。この関数を MATLAB Compiler™ ツールおよび MATLAB Coder™ ツールで使用することもできます。

genFunction(___,'MatrixOnly','yes') は既定の cell/行列の表記法をオーバーライドし、代わりに MATLAB Coder ツールと互換性のある行列引数のみを使用する関数を生成します。静的ネットワークの場合、行列の列は独立した標本として解釈されます。動的ネットワークの場合、行列の列は一連のタイム ステップとして解釈されます。既定値は 'no' です。

genFunction(___,'ShowLinks','no') は生成されたヘルプとソース コードへのリンクを表示する既定の動作を無効にします。既定値は 'yes' です。

すべて折りたたむ

この例では、静的ニューラル ネットワークから MATLAB 関数と MEX 関数を作成する方法を説明します。

まず、静的ネットワークの学習を行い、学習データに対する出力を計算します。

[x,t] = bodyfat_dataset;
bodyfatNet = feedforwardnet(10);
bodyfatNet = train(bodyfatNet,x,t);
y = bodyfatNet(x);

次に、MATLAB 関数の生成とテストを行います。その後、新しい関数は、mcc で共有/ダイナミック リンク ライブラリにコンパイルされます。

genFunction(bodyfatNet,'bodyfatFcn');
y2 = bodyfatFcn(x);
accuracy2 = max(abs(y-y2))
mcc -W lib:libBodyfat -T link:lib bodyfatFcn

次に、行列引数のみ (cell 配列は対象外) をサポートする MATLAB 関数の別のバージョンを生成し、その関数をテストします。MATLAB Coder ツール codegen を使用して MEX 関数を生成し、同様にテストします。

genFunction(bodyfatNet,'bodyfatFcn','MatrixOnly','yes');
y3 = bodyfatFcn(x);
accuracy3 = max(abs(y-y3))
 
x1Type = coder.typeof(double(0),[13 Inf]); % Coder type of input 1
codegen bodyfatFcn.m -config:mex -o bodyfatCodeGen -args {x1Type}
y4 = bodyfatodeGen(x);
accuracy4 = max(abs(y-y4))

この例では、動的ニューラル ネットワークから MATLAB 関数と MEX 関数を作成する方法を説明します。

まず、動的ネットワークの学習を行い、学習データに対する出力を計算します。

[x,t] = maglev_dataset;
maglevNet = narxnet(1:2,1:2,10);
[X,Xi,Ai,T] = preparets(maglevNet,x,{},t);
maglevNet = train(maglevNet,X,T,Xi,Ai);
[y,xf,af] = maglevNet(X,Xi,Ai);

次に、MATLAB 関数の生成とテストを行います。この関数を使用して、mcc で共有/ダイナミック リンク ライブラリを作成します。

genFunction(maglevNet,'maglevFcn');
[y2,xf,af] = maglevFcn(X,Xi,Ai);
accuracy2 = max(abs(cell2mat(y)-cell2mat(y2)))
mcc -W lib:libMaglev -T link:lib maglevFcn

次に、行列引数のみ (cell 配列は対象外) をサポートする MATLAB 関数の別のバージョンを生成し、その関数をテストします。MATLAB Coder ツール codegen を使用して MEX 関数を生成し、同様にテストします。

genFunction(maglevNet,'maglevFcn','MatrixOnly','yes');
x1 = cell2mat(X(1,:)); % Convert each input to matrix
x2 = cell2mat(X(2,:));
xi1 = cell2mat(Xi(1,:)); % Convert each input state to matrix
xi2 = cell2mat(Xi(2,:));
[y3,xf1,xf2] = maglevFcn(x1,x2,xi1,xi2);
accuracy3 = max(abs(cell2mat(y)-y3))
 
x1Type = coder.typeof(double(0),[1 Inf]); % Coder type of input 1
x2Type = coder.typeof(double(0),[1 Inf]); % Coder type of input 2
xi1Type = coder.typeof(double(0),[1 2]); % Coder type of input 1 states
xi2Type = coder.typeof(double(0),[1 2]); % Coder type of input 2 states
codegen maglevFcn.m -config:mex -o maglevNetCodeGen -args {x1Type x2Type xi1Type xi2Type}
[y4,xf1,xf2] = maglevNetCodeGen(x1,x2,xi1,xi2);
dynamic_codegen_accuracy = max(abs(cell2mat(y)-y4))

入力引数

すべて折りたたむ

ニューラル ネットワーク。ネットワーク オブジェクトとして指定します。

例: net = feedforwardnet(10);

生成された関数ファイルの場所と名前。文字列として指定します。ファイル名拡張子 .m を指定しない場合、自動的に追加されます。ファイルのパスを指定しない場合は、現在の作業フォルダーが既定の場所になります。

例: 'myFcn.m'

データ型: char

拡張機能

バージョン履歴

R2013b で導入