ニューラルネットワー​クのC++共有ライブ​ラリ化について

2 views (last 30 days)
Hiroki
Hiroki on 29 Sep 2023
Commented: Kojiro Saito on 6 Nov 2023
feedforwardnet関数をしようして機械学習のプログラムを作成したのですが、これによって出力されたnetworkオブジェクトを使用したプログラムをライブラリコンパイラによってC++共有ライブラリに変換することは可能でしょうか。
現在、MATLABで行った機械学習をC++で利用できるようなプログラムを開発しています。
compiler.build.cppSharedLibrary関数を使用してC++共有ライブラリ化をやろうとしたのですが、networkオブジェクトを呼び出す部分でエラーが発生してしまい、うまくライブラリ化することができませんでした。
ご回答のほうをよろしくお願いします。
  2 Comments
Kojiro Saito
Kojiro Saito on 1 Oct 2023
networkオブジェクトを呼び出すのもC++ライブラリに変換可能(MATLAB Compiler SDKが対応している関数)なので、呼び出し方に何か原因がありそうです。
エラーメッセージと、該当部分のコード抜粋を開示いただけますか?
Hiroki
Hiroki on 6 Oct 2023
Moved: Kojiro Saito on 6 Oct 2023
<Call_testing2.m>
function K = Call_testing2(Data)
K=ANNmethod(Data);
<ANNmethod.mat> 機械学習によって出力された.mat機械学習ファイル
この二つのファイルを以下の二つのコンパイルをしましたが以下のようなエラーが出ました。
>> buildResults = compiler.build.cppSharedLibrary(Call_testing2)
入力引数が不足しています。
エラー: Call_testing2 (行 11)
K=ANNmethod(Data);
>> buildResults = compiler.build.cppSharedLibrary(opnet.mat)
SWITCH 式は、スカラーか文字ベクトルでなければなりません。
エラー: インデックス (行 173)
switch (subs)
ご回答のほうをよろしくお願いします。

Sign in to comment.

Answers (1)

Kojiro Saito
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
(2) compiler.build.cppSharedLibraryの使い方について
入力引数は文字列なので、
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
Hiroki
Hiroki on 5 Nov 2023
文字化けの件は現在確認しております。
追加でご質問が2点ございます。
一つ目は、MATLABC++共有ライブラリはVisualStudio32bitの環境下で使用することは可能でしょうか。
二つ目は、現在質問しているプログラムをMATLABCoderでC++に変換して使用することは可能でしょうか。こちらについて、実際にやってみたのですが、load関数の部分でエラーが発生してしまいます。
ご回答よろしくお願いします。
Kojiro Saito
Kojiro Saito on 6 Nov 2023
  • C++共有ライブラリは64bitのみのライブラリのみ作成できます。
  • MATLAB CoderでC++に変換することは可能ですが、loadの出力を変数に代入したりgenFunctionでCコード生成に対応する関数を作成したりなどのステップが必要になります。
ただ、追加の質問は本質問の当初の内容から離れてきているので、新規の質問として別スレッドにしたほうが良いです。

Sign in to comment.

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!