我已经在matlab脚本文件中训练了神经网络,并将训练过的数据保存到.mat文件中。因此,在Simulink用户定义函数中加载.mat文件后,我可以使用此训练数据来测试输入。 但我得到运行时错误
调用Matlab函数中止:调用Matlab函数'sim'时出错。按“确定”打开调试器。
并且在调试器中错误是
MATLAB函数接口错误:调用MATLAB函数'sim'时出错。块神经网络功能(#108)执行时:无
代码为
function [tau1p,tau2p] = Nntwork(theta1,theta1d,theta2,theta2d,theta1dd,theta2dd)
coder.extrinsic('load');
coder.extrinsic('sim');
net=load('trainednet.mat');
a=zeros(1,2);
a=sim(net,[theta1;theta1d;theta1dd;theta2;theta2d;theta2dd]);
如果有人可以帮我解决此错误。
答案 0 :(得分:0)
我要检查的第一件事是你的变量net
实际上是一个NN对象。您用于load
的语法将mat文件中的所有变量加载到名为net
的结构中,您很可能需要使用net.net
来提取net
变量来自net
结构。 (当然,如果是这种情况,那么你不应该调用结构(即load
)net
的输出,因为它会非常混乱。
但是,我建议最好的方法是将代码包装到另一个函数中,然后从MATLAB功能块中调用该函数。即。
使MATLAB功能块像:
function [tau1p,tau2p] = NntworkWrapper(theta1,theta1d,theta2,theta2d,theta1dd,theta2dd)
coder.extrinsic('Nntwork');
a=zeros(1,2);
a=Nntwork([theta1;theta1d;theta1dd;theta2;theta2d;theta2dd]);
然后在单独的m文件中添加此附加功能:
function a = Nntwork(theta_data)
load('trainednet.mat');
a=sim(net,theta_data);
这样的设置将使您能够独立于Simulink运行和测试NN代码,但也可以在需要时从Simulink调用它。