问题:使用matlab神经网络工具搭建ANN后保存为mat格式的文件,其在matlab中的结构为:
包含以下字段的 struct:
inputs: [1×1 struct]
net: [1×1 network]
matlab中封装为java调用的的代码且在matlab中能正常使用:
function [test,output] = guid(file,input_x )
test = load(file);
P2 = input_x';
output = net(P2);
end
正如红色标记其类型为network,但在java中调用时出现以下错误:
类 'network' 是未知对象类,或者没有有效的 'loadobj' 方法。该类的对象 'net' 已转换为结构体。(注意:Java下改变了net的类型,这是错误原因所在)
那我们如何解决上述问题呢?既然是类型改变,就可以从类型转换的角度去思考,通过查资料,我将原matlab代码修改如下:
function [test,output] = guid(file,input_x )
test = load(file);
net = network(test.net); %%进行转换
P2 = input_x';
output = net(P2);
end
再进行封装jar,在java中就成功了,即问题解决!
test grade = test(); //实例化
Object [] test = grade.guid(2,input_ANN, test_data); //java中调用代码
成功返回训练结果:
0.9891
0.0103
0.0006
0.0000
================================思考总结===================================
人工智能、机器学习盛行当下,对于初学者matlab无疑是一个值得选择的一个平台,可以迅速将思路付诸于实践,我的系统采用java实现,为发挥matlab自身独有的快速计算和矩阵处理及封装了大量神经网络算法,初期我选择了将其封装为jar包,供java使用,实践结果证明在数据量及业务复杂度不高的情况下,其在效率和速度上都在可接受范围内。反之,则在速度上差强人意还是需要选择python等机器学习平台如TensorFlow等来实现。