Нейронная сеть 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 standingAcceleration_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-codefor 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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]