私はOpenCVとAndroid開発のnoobです。OpenCVのJava APIを使用してニューラルネットワークを実装しようとしています。 ReLUのアクティベーション機能以外に必要な機能がすべて見つかりました。だから私はJavaでこの機能を手動で実装することにしました。私の実装は、Matの要素を1つずつトラバースし、Mat.get()を使用して要素にアクセスし、負の値を変更し、Mat.put()を使用してそれらを書き戻します。OpenCVのAndroid APIを使用してアクティベーション機能を実装する方法は?
for (int i = 0; i < output_dim; i++) {
float[] value = new float[1];
input.get(0, i, value);
if (value[0] < 0) {
value[0] = 0;
input.put(0, i, value);
}
}
私は私のコードをプロファイリングしているし、それは私のReLU機能(getおよびput)全体のネットワーク運用のボトルネックになっているように見えます。私はいくつかの解決策を考えることができますが、どちらが優れているのか、解決策が私より優れているかはわかりません。
- 複数の入力を同時に処理するには、ReLUの並列実装を使用します。
- ReLUをC++で実装して、行列の要素に簡単にアクセスできるようにします。
- どういうわけか、ニューラルネットワークの基本的な構成要素のいくつかを持っているOpenCV's DNN moduleまたはANN_MLPを使用してください。これらのC++実装をJavaコードでどのように使用できるかはわかりませんが、
これらの解決策が良いかどうか、または他の解決策を紹介していただけますか?