查看: 443|回复: 3|关注: 0

[已解决] 离线训练好的神经网络怎样通过MATLAB function调用进Simulink??

[复制链接]

新手

5 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
发表于 2018-12-11 17:37:42 | 显示全部楼层 |阅读模式
       各位前辈好,在做课题的过程中遇到了问题,离线训练好的网络如何通过MATLAB function调用进Simulink,我尝试了三种办法:
       1.在Command Window加载了训练好的net,Workspace中可以看到,在M-function中使用 load指令,报错Function 'load' is not supported for code generation. Consider using coder.extrinsic('load') to bypass code generation.说load指令只适用于外部,不能用于Simulink,于是根据建议在load指令前添加了coder.extrinsic('load')在程序中,运行后依然报错Undefined function or variable 'net'.
       2.于是我想可能net这个变量没有设置为全局变量,于是我分别在Command Window和M-function中设置和声明了net,依旧报错Global declaration not resolved to a Data Store Memory block registered via the Ports and Data Manager.
       3.走投无路的第三种方案,我觉得虽然Workspace中已经存了网络net,但传送不到simulink中,于是我用From Workspace模块把net传进Simulink中,这个方法依旧行不通啊:'(
       所以请问怎样在M-function中调用训练好的net,万分感谢各位前辈。

新手

5 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
 楼主| 发表于 2018-12-12 13:30:47 | 显示全部楼层
好吧,我来自问自答吧
经过了一早上的查阅,知道了解决的办法
只要查看已经训练好的网络各层之间的权值和偏置就可以了
这是百度到的查看语句:
训练好的权值、阈值的输出方法是:
输入到隐层权值: w1=net.iw{1,1}
隐层阈值: theta1=net.b{1}
隐层到输出层权值: w2=net.lw{2,1};
输出层阈值: theta2=net.b{2}
复制到MATLAB function程序中,直接使用就OK了

新手

5 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
发表于 2018-12-22 16:34:12 | 显示全部楼层
遇到了相同的问题能不能帮忙解决下

新手

10 麦片

财富积分


050


0

主题

9

帖子

0

最佳答案
发表于 2019-2-6 14:29:55 | 显示全部楼层
沙恭兜 发表于 2018-12-12 13:30
好吧,我来自问自答吧
经过了一早上的查阅,知道了解决的办法
只要查看已经训练好的网络各层之间的权值和偏 ...

你好,我为什么将您的方法复制到Matlab Function中依旧不能调用已经训练好的神经网络,出现错误

程序内方法

程序内方法

运行错误

运行错误

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

快速回复 返回顶部 返回列表