Neural network genfunction and matlab codegen generates incorrect parameters.
4 views (last 30 days)
Show older comments
Anthony Shivakumar
on 12 Feb 2014
Answered: Fred Smith
on 12 Feb 2014
I have a trained neural network. The input is a array of 62500 rows and the output is an array of 4 rows. (The input is an image of size 250 * 250 reshaped to a single column array of 62500 rows)
Using, this net object I generated its matlab function using a similar syntax as the shown below:
genFunction(men_women_cloth_Net,'men_women_netFn','MatrixOnly','yes');
Once, i get the funtion, i tested within matlab and it worked fine.
Generating the C code: My next step to generate the C code is to now define the input and output datatype. Based on the example shown in the neural network genfunction page, I used a similar syntax to generate the code:
x1Type = coder.typeof(double(0),[13 Inf]); % Coder type of input 1
codegen -c -v men_women_netFn.m -config:dll -o libmen_women_nn -args {x1Type}
The code is generated on a linux based machine. The 1st few lines of the generated code looks like:
void men_women_netFn(const char_T x1[7], real_T b_y1[28])
{
static real_T xp1[437500];
static const real_T dv0[62500] = { 253.0, 253.0, 253.0, 253.0, 253.0, 253.0,
Now what does not make sense: Why do we have an array of x1[7]? should not it just be x1[1] ?
the generated file states:
/* [y1] = men_women_netFn(x1) takes these arguments: */
/* x = 62500xQ matrix, input #1 */
/* and returns: */
/* y = 4xQ matrix, output #1 */
/* where Q is the number of samples. */
Which now mean the number '7' is Q samples, which is 7. why ? The output is also 7 samples, 4 * 7 = 28 == b_y1[28] .
Now, i am sure i have not explicitly stated any sample number, and neither has the genfunction code generate any explicit sample number
function [y1] = men_women_netFn(x1)
%MEN_WOMEN_NETFN neural network simulation function.
%
% Generated by Neural Network Toolbox function genFunction, 10-Feb-2014 05:22:00.
I am using this with opencv. I am able to compile the code and run it with opencv, but the output from the generated code function are not correct. Further any input i give, the output is exactly the same suggesting the code generated does not seem right.
Help much appreciated.
2 Comments
Accepted Answer
Fred Smith
on 12 Feb 2014
Somehow MATLAB Coder is interpreting {x1Type} as a string of 7 elements, instead of as a cell array with one argument. I don't know why this is happening, but it is consistent with the effect you are seeing.
Try moving this argument earlier in the list. Or try removing the braces. Double-check the spelling to make sure there is nothing mistyped.
0 Comments
More Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!