hero1_1985 发表于 2007-9-3 15:21:18

总结:VC+中调用matlab的神经网络方法

因为一个项目要在vc中使用神经网络,而当时不熟悉神经网络,所以要就准备在vc中调用matlab里的神经网络函数.
可是matlab的compiler对神经网络有限制,具体见


http://www.mathworks.com/products/compiler/compiler_support.html

VC+中调用matlab中的人工神经网络可以通过3种方法来实现

1.用调用matlab引擎库函数的方法
参考:matlab版的老帖子和taohe的书

2. 因为mathwork对其限制,不能编译.所以可以用absolete里的函数,这里以trainbpx为例,虽然算法过时,但是容易看懂.在编译时没有限制性.唯一的问题是有feval调用了purelin;deltalin;logsig;deltalog;tansig;deltatan;比如出现了error: Reference to unknow function 'purelin' from FEVAL in stand-alone mode可以用if 或switch将那几句其替换,对比一下运行的结果,最早就用的这种方法。但在最近的整理代码时发现有人有更聪明的做法.思路是可以提前调用使编译器编译那个函数。编译产生dll或是com组件调用的做法参考matlab的帖子或taohe的书。要注意二维数组变为variant时和调用时的行和列不要搞错.

比如下面的代码可以通过编译

A=;
purelin(A);
deltalin(A);
logsig(A);
deltalog(A);
tansig(A);
deltatan(A);%提前先把可能的函数调用一下让编译器识别
P = ';
T = ';
P=premnmx(P);
T=premnmx(T);
= size(P);
S1 = 12;
S2 = 12;
= size(T);
W1 = rands(S1,R);B1 = rands(S1,1);
W2 = rands(S2,S1);B2 = rands(S2,1);
W3 = rands(S3,S2);B3 = rands(S3,1); %初始化
disp_freq = 20;max_epoch = 3000;err_goal = 0.1;lr = 0.01;
lr_inc = 1.05;lr_dec = 0.7;momentum = 0.95;err_ratio = 1.04;
TP = ;
= trainbpx(W1,B1,'purelin',W2,B2,'logsig',W3,B3,'tansig',P,T,TP);
%Y=simuff(X1,W1,B1,'purelin'',W2,B2,'logsig',W3,B3,'tansig');

3. 通过rtw使用训练好的网络,在vc中使用产生的代码,在matlab版中搜索rtw有一个在vc中使用rtw产生代码的英文和中文教程,还谢谢stream大哥把代码发到我邮箱里。


以上三种做法都调试成功,

第一种不能脱离matlab.

第二种我一共花了两个月的课余时间调试成功(刚接触混编),感谢taohe.
另外不推荐这种方法,并不实用.真要在c中使用神经网络就用c编好了,也有现成的程序.当时想偷懒不想了解神经网络算法,结果花了更多时间。

第三种最简便(刚调试成功,比第二种要简单的多)。只能在外部训练网络就是唯一的缺点了.

[ 本帖最后由 hero1_1985 于 2007-10-18 11:11 编辑 ]

gaochunzy 发表于 2007-9-3 19:22:10

好强啊!牛

taohe 发表于 2007-9-3 22:50:28

原帖由 hero1_1985 于 2007-9-3 15:21 发表 ...
第二种我一共花了两个月的课余时间调试成功(刚接触混编)
...

看来楼主很有耐心,这种脚踏实地的钻研精神值得我们学习。

另外,记得matlab的compiler对神经网络的支持只限于于使用训练好的网络,也就是说,运用上面说的第二种方法,也应该只能在外部训练好网络。请问是不是这样?

hero1_1985 发表于 2007-9-3 23:00:51

回复 #3 taohe 的帖子

谢谢taohe大哥的鼓励
第二种是自己修改了m文件,训练网络和使用网络都可以.

primer123 发表于 2007-9-5 14:01:44

不错,学习

primer123 发表于 2007-9-5 14:05:44

有具体的例子吗

zhan_shen 发表于 2007-9-6 22:37:24

希望lz能贴出具体的例子,或者说是关键代码,也让我们也乘乘凉

zhanrixin1983 发表于 2007-9-13 15:23:31

请问也可以用引擎的方法调用模糊工具箱吗?

tina_lee 发表于 2007-10-18 10:31:46

回复 #8 zhanrixin1983 的帖子

请问使用COM组件可以编译神经网络函数文件吗?

chinasnowlee 发表于 2011-9-19 14:50:51

你好,我想用nntool来求解一个矛盾方程组,该如何实现呢??目标函数如何输入呢??谢谢
页: [1]
查看完整版本: 总结:VC+中调用matlab的神经网络方法