Нейронная сеть C++ код из Matlab Coder

Я обучил нейронную сеть на панели инструментов Matlab "Распознавание образов нейронной сети" и сгенерировал функцию.m из панели инструментов. Я также написал свою собственную функцию, которая получает набор данных, содержащий матрицу inf x 5 с входными данными, вызывает функцию NN из панели инструментов и возвращает вектор с распознанным шаблоном и процентным значением. (входная матрица содержит шаблон, который должен быть обнаружен)

Поскольку мне нужно запустить код на Arduino, я попытался использовать Matlab Coder для генерации кода C++, но он не работает. Во-первых, я получаю предупреждение о том, что arrayfun не поддерживается для генерации кода (вызов функции arrayfun находится в сгенерированной функции из набора инструментов). После этого я определил ввод функции как " double(:7351 x 5)" (это до 7351, потому что мой набор данных для обучения такой большой). Теперь кодер создает MEX-файл для проверки проблем во время выполнения, и там возникают некоторые ошибки.

Я не знаю, почему целевой журнал сборки на немецком языке, потому что остальная часть Matlab на английском языке, но, как правило, некоторые скобки и точки с запятой отсутствуют, но почему? Как могут отсутствовать скобки в файле matrix.h или amlrt.h???

  1   cl  /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE   /O2 /Oy- /DNDEBUG  /fp:strict  /I "C:\PROGRA~1\MATLAB\R2016a\simulink\include" /I "C:\PROGRA~1\MATLAB\R2016a\toolbox\shared\simtargets" /I "C:\Users\Kai\Desktop\YUN_SI~1" /I "C:\Users\Kai\Desktop\YUN_SI~1\codegen\mex\NeuralNetwork" /I ".\interface" /I "C:\PROGRA~1\MATLAB\R2016a\extern\include" /I "." "NeuralNetwork_data.c"
    2   NeuralNetwork_data.c
    3   c:\program files\matlab\r2016a\extern\include\matrix.h(260) : error C2061: Syntaxfehler: Bezeichner 'mxChar'
    4   c:\program files\matlab\r2016a\extern\include\matrix.h(260) : error C2059: Syntaxfehler: ';'
    5   c:\program files\matlab\r2016a\extern\include\matrix.h(605) : error C2143: Syntaxfehler: Es fehlt '{' vor '*'
    6   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(56) : error C2143: Syntaxfehler: Es fehlt ')' vor '*'
    7   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(56) : error C2143: Syntaxfehler: Es fehlt '{' vor '*'
    8   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(56) : error C2373: 'emlrtCTX': Neudefinition; unterschiedliche Modifizierer
    9           C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(50): Siehe Deklaration von 'emlrtCTX'
   10   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(56) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'aTLS'
   11   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(56) : error C2059: Syntaxfehler: ')'
   12   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(133) : error C2061: Syntaxfehler: Bezeichner 'EmlrtErrorFunction'
   13   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(139) : error C2059: Syntaxfehler: '}'
   14   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(194) : error C2061: Syntaxfehler: Bezeichner 'emlrtContextGlobal'
   15   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(194) : error C2059: Syntaxfehler: ';'
   16   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(808) : error C2143: Syntaxfehler: Es fehlt ')' vor '*'
   17   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(808) : error C2143: Syntaxfehler: Es fehlt '{' vor '*'
   18   C:\PROGRA~1\MATLAB\R2016a\extern\include\emlrt.h(808) : error C2059: Syntaxfehler: ')'
   19   c:\users\kai\desktop\yun_simulink\codegen\mex\neuralnetwork\NeuralNetwork_data.h(32) : error C2061: Syntaxfehler: Bezeichner 'emlrtContextGlobal'
   20   c:\users\kai\desktop\yun_simulink\codegen\mex\neuralnetwork\NeuralNetwork_data.h(32) : error C2059: Syntaxfehler: ';'
   21   NeuralNetwork_data.c(22) : error C2061: Syntaxfehler: Bezeichner 'emlrtContextGlobal'
   22   NeuralNetwork_data.c(22) : error C2059: Syntaxfehler: ';'
   23   NeuralNetwork_data.c(22) : error C2513: '/*global*/ ': Keine Variable vor '=' deklariert
   24   gmake: *** [NeuralNetwork_data.obj] Error 2

В целом, можно создать код C++ из набора инструментов NN, но почему он не работает в моем случае?

Функция, которую я хочу перевести на C++:

function [ activity, percent ] = NeuralNetwork( Data )
%NN for recogniton of activitys standing, sitting, walking from Accelerometer data, relative error
%is returned in percent
%   input Data contains 5 columns. 1. col -> time; 2-4.col ->
%   x,y,z-Acceleration; 5.col -> activity
%   VAR activity contains 1 for walking, 2 for sitting and 3 for standing 


    Acceleration_data = Data(:,2:4);  %store acceleration data in a matrix
    Acceleration_data = Acceleration_data';     %NN input expects transposed matrix

    targets = Data(:,5);    %activity that should be detected from the NN
    targets = targets';     %output of NN is also transposed

    NNfit = myNeuralNetworkFunction(Acceleration_data); %call the trained NN 
    NNfit = round(NNfit);                             %output can be e.g. 0.998 -> round to 1
    activity=zeros(1,length(NNfit));                   %allocate memory for cpp-code


for i=1:length(NNfit)               %NNfit is a 3D matrix, after round one
    [val pos] = max(NNfit(:,i));    %element is 1 the other are 0 the number of 
                                    %the row represents the activity
    activity(i) = pos;              %vektor containing the activity
end

cnt=0;              %calc percent of correct recognized data points
for i=1:length(NNfit)
   if activity(i) == targets(i)
       cnt = cnt+1;         %amound of correct recognized data points
   end
end

percent = (cnt/length(targets))*100;   %calc percent

end

редактировать:

Файл NeuralNetwork_data.c:

/* Include files */
#include "rt_nonfinite.h"
#include "NeuralNetwork.h"
#include "NeuralNetwork_data.h"
#include "blas.h"

/* Variable Definitions */
emlrtCTX emlrtRootTLSGlobal = NULL;
const volatile char_T *emlrtBreakCheckR2012bFlagVar = NULL;
covrtInstance emlrtCoverageInstance;
emlrtContext emlrtContextGlobal = { true, false, 131434U, NULL, "NeuralNetwork",
  NULL, false, { 2045744189U, 2170104910U, 2743257031U, 4284093946U }, NULL };

emlrtRSInfo f_emlrtRSI = { 68, "eml_mtimes_helper",
  "C:\\Program Files\\MATLAB\\R2016a\\toolbox\\eml\\lib\\matlab\\ops\\eml_mtimes_helper.m"
};

emlrtRSInfo g_emlrtRSI = { 85, "xgemm",
  "C:\\Program Files\\MATLAB\\R2016a\\toolbox\\eml\\eml\\+coder\\+internal\\+blas\\xgemm.m"
};

emlrtRSInfo n_emlrtRSI = { 214, "minOrMax",
  "C:\\Program Files\\MATLAB\\R2016a\\toolbox\\eml\\eml\\+coder\\+internal\\minOrMax.m"
};

emlrtRSInfo o_emlrtRSI = { 375, "minOrMax",
  "C:\\Program Files\\MATLAB\\R2016a\\toolbox\\eml\\eml\\+coder\\+internal\\minOrMax.m"
};

emlrtRSInfo p_emlrtRSI = { 347, "minOrMax",
  "C:\\Program Files\\MATLAB\\R2016a\\toolbox\\eml\\eml\\+coder\\+internal\\minOrMax.m"
};

/* End of code generation (NeuralNetwork_data.c) */

0 ответов

Другие вопросы по тегам