ニューラルネットワークのC++共有ライブラリ化について
2 views (last 30 days)
Show older comments
feedforwardnet関数をしようして機械学習のプログラムを作成したのですが、これによって出力されたnetworkオブジェクトを使用したプログラムをライブラリコンパイラによってC++共有ライブラリに変換することは可能でしょうか。
現在、MATLABで行った機械学習をC++で利用できるようなプログラムを開発しています。
compiler.build.cppSharedLibrary関数を使用してC++共有ライブラリ化をやろうとしたのですが、networkオブジェクトを呼び出す部分でエラーが発生してしまい、うまくライブラリ化することができませんでした。
ご回答のほうをよろしくお願いします。
2 Comments
Kojiro Saito
on 1 Oct 2023
networkオブジェクトを呼び出すのもC++ライブラリに変換可能(MATLAB Compiler SDKが対応している関数)なので、呼び出し方に何か原因がありそうです。
エラーメッセージと、該当部分のコード抜粋を開示いただけますか?
Answers (1)
Kojiro Saito
on 6 Oct 2023
2点あります。
(1) matファイルの読み込み
Call_testing2.mの処理の中でmatファイルを読み込む処理がないため、ANNmethodが存在しないというエラーが出てしまいます。load('ANNmethod.mat')を追加してください。
function K = Call_testing2(Data)
load('ANNmethod.mat')
K=ANNmethod(Data); % ANNmethod.mat 機械学習によって出力された.mat機械学習ファイル
end
入力引数は文字列なので、
compiler.build.cppSharedLibrary(Call_testing2)
ではなく
compiler.build.cppSharedLibrary('Call_testing2.m')
となります。
また、処理に使うmatファイルはcompiler.build.cppSharedLibraryを実行する必要がありません。コンパイルするのは、メインとなる関数(.mファイルまたは.mlxファイル)だけです。
compiler.build.cppSharedLibraryが自動的にファイルの依存関係を見て.matファイルなどをコンパイルに取り込んでくれますが、うまく行かない場合はAdditionalFilesのオプションで手動で追加することもできます。
compiler.build.cppSharedLibrary('Call_testing2.m', 'AdditionalFiles', 'ANNmethod.mat')
コマンドを使わず、GUIからもできます。アプリタブにある「ライブラリコンパイラー」をクリックして、タイプを「C++共有ライブラリ」にし、エクスポートする関数で「'Call_testing2.m」をファイル選択します。「パッケージ化」】ボタンを押せば自動的にコンパイルされます。
8 Comments
Kojiro Saito
on 6 Nov 2023
- C++共有ライブラリは64bitのみのライブラリのみ作成できます。
- MATLAB CoderでC++に変換することは可能ですが、loadの出力を変数に代入したりgenFunctionでCコード生成に対応する関数を作成したりなどのステップが必要になります。
ただ、追加の質問は本質問の当初の内容から離れてきているので、新規の質問として別スレッドにしたほうが良いです。
See Also
Categories
Find more on C 共有ライブラリの統合 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!