Matlab builder for .net (deploytool)使用心得2

最近想用C#调用matlab编译成的关于rbf神经网络的dll文件,出现了很多问题。

     先将问题列入下面:

     1 rbf神经网络分为设计网络newrbe 和 预测sim 两部分,但sim是matlab的内置的函数,你根本看不到代码,不信你在命令行里输入edit sim 的话,会提示:built-in function,根本看不到庐山真面目,这样的话就不能将sim直接作为一个函数进行编译。

     2 调用newrbe后回返回一个生成的网络net,这里包含了所有的网络参数,作为后面sim的一个输入参数,所以如果以后需要用训练好的模型预测是,就必须提供该参数,所以希望能将这个参数在.net环境里保存下来,但在 .net 里传出来的是空,也就是说根本返回不了任何值,这样如何保存??5555

     现在就这两个问题进行一下探讨,对于问题1,我采用了在matlab下再封装一个函数Sim,其中在该函数里调用系统的内置函数sim,这样就有了具体的函数,就可以进行编译了,具体代码如下:

function result = Sim(net,p)

result = sim(net,p');
result = result';

当然我传入是用的p的转置,是根据我的矩阵的格式需要,可根据自己的矩阵格式进行调整。

 

当然,为了比较对应,我也将newrbe进行了一下封装成Train函数,这样的话在生成的.dll中只需要调用Train和Sim 就可以完成训练和预测。

function net = Train(p,t,spread)
net = newrbe(p',t',spread);

     对于问题2,我比较头疼,因为明明是在matlab里有返回结果,但是传到.net  平台下就是空的,我无奈啊,尝试了很多方法,都是徒劳,正当我又要绝望的时候,我突然想到了返回的net的数据类型,我试探了一下,发现返回的类型是matlab里自定义的一个network类型,这真是怪,我还以为是struct,或者cell等类型,原来是这个卑鄙的类型弄的我好郁闷,于是我试着将network转换成struct的类型,然后再试试,我靠,my god ,竟然返回了值,当时欣喜若狂的心情不亚于找到了女朋友的兴奋。

下面是改写后的Train和Sim

function net = Train(p,t,spread)
net = newrbe(p',t',spread);
net = struct(net);  //添加了该行代码,强制转换,其他类型之间的相互转换能否成功就看你的运气了,看来我运气不错,汗!!

 

function result = Sim(net,p)
net = network(net); //对应添加该行代码

result = sim(net,p');
result = result';

 

做到这里本来以为可以喝杯茶了,没想到困难又接踵而至&#x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值