C#神经网络程序(改自C++)改错求教(附C#与原C++代码)
我准备将某书中的一个C++写的BP神经网络的例子改用C#实现。但是改写之后不知道什么地方出了问题,网络训练收敛变得及其慢了。原来的C++程序用20000多次迭代即可将积累误差缩小到阈值以下;我改写的C#程序迭代数十万次,积累误差距离阈值还是很远。
我想可能是程序什么地方处理得不对。我是一行一行对照着改写的,并且检查了多遍,没有发现错误在哪里。下面是我改写的主要方式:
1、C++中的vector<...>在C#中转为List<...>
2、C++中按值传入或返回的vector<...>,在C#中new List<...>的方式构造复本。
3、C++中按引用传入或返回的vector<...>,在C#中直接传递名称。
4、C++中用到vector<...>::iterator的地方,在C#全部改用数组下标的方式实现。
5、已经注意到了vector的end()指向的是末元素之后位置的问题。
谁能帮我看看程序,对照一下我的C#和原来的C++,究竟是什么地方出了问题。
从这里下载:http://www.linjian.cn/temp/bp.rar
主要是这几个文件(只是对BP神经网络的实现,其它的部分还没有改写):
CNeuralNet.cpp——NeuralNet.cs
CData.cpp——GestureData.cs
defines.h——Useful.cs
谢谢!
------解决方案--------------------有没有小数位置的关系呀?
------解决方案--------------------up
------解决方案--------------------@_@
------解决方案--------------------不懂,顶你一下
------解决方案--------------------相差甚远
------解决方案--------------------你的c++和c#版本的差异太大。
虽然写得很好,太专业了,理解起来有点困难。
而且c++版本在vs2005编译不通过。没办法了。
估计出现错误的原因有2个:
1、数值类型的使用。
2、引用和值传递出现差错。
------解决方案--------------------BP网络网上直接有源代码下载,不需要改写。。。
------解决方案--------------------为什么要改写呢,想用的话,用VC把它封装成DLL不就可以用了吗?