C#中实现神经网络算法打包dll(给Unity调用)

最近做Unity项目的时候有一个需求:在Unity中实现神经网络算法,最终还要满足跨平台,也就是在windows下和android下都能使用。在Unity中只涉及到网络的实现部分,也就是正向传播部分,网络的训练可以放到matlab和python中,这样可以减轻开发的压力。

做了下面的一些简单尝试:

1、C++打包dll给Unity调用,在Windows下没问题可行,在Android下不可行,实际上这个结果也可以理解,毕竟dll是Windows环境使用的。

2、C#打包dll给Unity调用,在Windows下和Android下均可行,个人理解是Unity的mono帮我们处理了C#的dll毕竟C#是Unity的原生语言。

这里打包dll不直接使用源码主要是因为项目合作需要,实际上如果自己使用,用C#源码应该更好些。

下面主要说一下,如何在C#中实现神经网络以及打包dll。本着拿来主义的原则,在开始编码前收集了些资料,发现还真有相关的资料可以参考和借鉴。《C#神经网络编程》,找了半天没找到电子版,后来发现其原版书有电子版《Hand on  neural network with c#》大家搜这个会找到资源(不知道为什么我上传到CSDN总是被删除)。对应代码库:https://github.com/PacktPublishing/Hands-On-Neural-Network-Programming-with-CSharp

我这里只需要使用普通的神经网络即可,即能满足实际需要。借鉴其中第二章的代码,提取了其中有用的部分,不得不说确实是大牛写的代码,得好好学习学习。本来不想设置下载积分的,可是现在平台是自动设置的,如果有谁积分不够可以留言留邮箱。

解决方案下载地址:https://download.csdn.net/download/zhoudapeng01/12013244

解决方案中有两部分其中AlgorithmCSharp是打包算法为dll的项目,AlgorithmTest是测试dll的项目。C#打包dll比C++方便许多,不需要额外写export声明,配置好项目属性为导出类库即可。

C#中实现神经网络算法打包dll(给Unity调用)

AlgorithmCSharp项目中主要实现外部调用函数和加载神经网络参数的函数。这里加载神经网络参数通过加载资源的方式实现,这样相当于把参数也打包到了dll中。

C#中实现神经网络算法打包dll(给Unity调用)

以资源的方式加载网络参数。

C#中实现神经网络算法打包dll(给Unity调用)

这里Network中的数据格式需要在使用的时候研究下,里面有神经元结构(提供bias),突触结构(提供w,有方向性),注意里面的ID具有唯一性。

AlgorithmTest项目用于对AlgorithmCSharp生成的dll进行测试,这样就可以最快利用大神们写的代码实现我们需要的功能。

C#中实现神经网络算法打包dll(给Unity调用)