簡體   English   中英

如何使用MATLAB編碼器將經過訓練的神經網絡用作函數?

[英]How to use trained neural network as function using MATLAB coder?

我已經訓練了一個簡單的神經網絡,該網絡僅將4個數字相乘並給出1個數字作為輸出。

  ( output(x0) = in1(x0)*in2(x0)*in3(x0) *in4(x0)). 

或說明:
描述

我的神經網絡有4個輸入和1個輸出,[10 10]是隱藏層。 我使用'genFunction'生成了網絡之外的.m文件,然后使用MATLAB編碼器生成了C ++函數。 我使用以下輸入類型生成代碼:輸入類型:
輸入類型

我的問題是,當我測試C ++代碼時,它僅給出輸出的前兩個樣本。

我將條目存儲在大小為400(每個輸入大小為100)的std :: vector中

到目前為止,我已經完成了以下操作(盡管沒有理想的輸出):

 std::vector<double> Multiplier(std::vector<double>& input)
 {
   double* X_data = new double[input.size()];
   X_data = vec2ar(input);
   int X_size[2];
   X_size[0] = 4;
   X_size[1] = 100;
   double* Y_data = new double[input.size()];
   int Y_size[100];

原來是:

void multiplier(const double X_data[], const int X_size[2], double Y_data[], int
Y_size[2])
{
 double Xp1_data[800];
 int Xp1_size[2];
 int j;
 double a1_data[2000];
 int coffset;
 int a1_size[2];
 int boffset;
 double tmp_data[2000];
 int k;
 double b_a1_data[2000];

為了獲得輸出:

std::vector<double> output;
output = ar2vec(Y_data);
return output;

我想要的就是我們有4個向量,並將它們賦予此功能,只需簡單地乘以“描述”中所示的相應樣本(在我的情況下,我們有4個大小為100的向量,並且我們期望輸出大小為100)。

對於ar2vec和vec2ar函數:

std::vector<double> ar2vec(double arr[])
{
std::vector<double> vec;
copy(&arr[0], &arr[100], std::back_inserter(vec));
return vec;
}

double* vec2ar(std::vector<double> vec)
{
double * arr = new double[vec.size()];
copy(vec.begin(), vec.end(), arr);
return arr;
} 

如何解決我的問題?

默認情況下,MATLAB Coder會生成以列主要順序存儲矩陣和ND數組的代碼。 C和C ++中的典型布局是行主要順序。 為了確保正確的行為,在調用生成的代碼之前,必須先將數據從行專業轉換為列專業,然后再返回至行專業以使用輸出。

從MATLAB R2018a開始,MATLAB Coder提供了生成行主代碼的選項。 如果您的代碼已經按行主順序存儲數據,則啟用此設置將使您無需轉換大多數數據。 發行說明對此進行了說明 ,並且文檔中的一節描述了MATLAB Coder中的這些選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM