JAVA程序调用Matlab神经网络工具编译的jar包注意问题

  在使用matlab工具进行神经网络算法开发时,在matlab下可以正常使用。但是在编译生成jar包供java程序调用时,提示如下错误:

错误使用 feval

未定义与 'struct' 类型的输入参数相对应的函数 'nn_net_input_fcn.info'。

出错 nnModuleInfo (line 11)

出错 nnet7.net_input_fcn (line 6)

出错 netsum (line 28)

出错 network/subsasgn>getDefaultParam (line 2045)

出错 network/subsasgn>newLayer (line 2295)

出错 network/subsasgn>network_subsasgn (line 18)

出错 network/subsasgn (line 10)

出错 network>setnet (line 178)

出错 network>new_network (line 168)

出错 network (line 71)

出错 newff>new_5p1 (line 176)

出错 newff>create_network (line 129)

出错 newff (line 101)

出错 BPTest12 (line 6)

 

  从matlab官网解释,初步理解为Matlab Compiler不允许神经网络工具包训练函数被编译。(https://cn.mathworks.com/products/compiler/supported/compiler_support.html)

  针对上述问题,结合网上查找问题解决办法总结,总体思路流程如下:

1,用matlab神经网络工具编写相应神经网络创建、训练、测试过程(此处省略);

2,将训练好的神经网络模型,保存.mat文件。save([‘路径’,’文件名’],’对象名’)。示例如下:

      save(['c:/','net.mat'],'savenet');

    执行完之后,将会在path路径下找到一个net.mat文件。此时,训练好的神经网络模型就保存为.mat文件,供后续调用。

3matlab工具编写调用在第2步训练模型.mat文件所在的路径,load(‘路径/net.mat’)

net=load(‘路径/net.mat’);

[an,tr]=sim(net.savenet, 输入预测矩阵);


function [ output ] = BP_Class( input,input_forecast )
   net=load(input);
   inputn_test=mapminmax(input_forecast');
   [output ,tr]=sim(net,inputn_test); 
end


%在这里需要注意一点,如果是用[an,tr]=sim(net,输入预测矩阵);会出现如下错误:

%'model' parameter must be a string,这是由于该训练网络模型被保存为 struct array。必须用此格式进行引用 importvariablename.savedvariablename

%https://cn.mathworks.com/matlabcentral/answers/46034-neural-network-error-model-parameter-must-be-a-string-when-calling-sim-net-data

4java中调用matlab的函数传递参数为矩阵。

  在java程序中,定义一个多维数组,再通过构造函数MWNumericArray(double rval, MWClassID classid)

//创建一个2*4矩阵

int num[][]={{1,2,3,4},{5,6,7,8}};

MWNumericArray ayNum = new WNumericArray(num,MWClassID.SINGLE);

TestClass testClass=newTestClass();

result2=testClass.BP_Class(1,"c:\\net.mat",ayNum);


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值