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

2023-10-30

最近做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声明,配置好项目属性为导出类库即可。

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

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

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

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

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • dva.js 知识导图

    JavaScript语言 JavaScript语言 不要用 var 而是用 const 和 let 分别表示常量和变量 不同于 var 的函数作用域 const 和 let 都是块级作用域 模板字符串 模板字符串提供了另一种做字符串组合的方
  • HTTP与TCP的区别和联系

    相信不少初学应用网络程序开发的朋友都想知道Http与Socket连接究竟有什么区别 希望通过自己的浅显理解能对初学者有所帮助 一 基本概念 1 TCP连接 手机能够使用联网功能是因为手机底层实现了TCP IP协议 可以使手机终端通过无线网络
  • Java中常用的一种时间格式的转换方法

    有时需要将一种格式的时间转化成其他格式的时间 这里列举了一种常用的转换方法 将从控件获得类似于 Thu Jan 01 00 00 00 CST 2009 的时间格式转化称 yyyy MM dd 格式 DateFormat format1 n
  • Java基础16--面向对象:抽象类

    Java基础16 面向对象 抽象类 文章目录 Java基础16 面向对象 抽象类 概述 抽象类 继承抽象类 抽象方法 抽象类总结规定 概述 在面向对象的概念中 所有的对象都是通过类来描绘的 但是反过来 并不是所有的类都是用来描绘对象的 如果
  • 带你知道如何在Flask中集成支付宝第三方支付模块并进行联调?

    支付宝沙箱 支付宝沙箱基础配置 支付宝开放平台 如果从www alipay com访问 选择我是开发者 支付宝扫码登录 身份 自研开发者 控制台 gt 开发服务 gt 沙箱 gt 沙箱应用 沙箱 协助开发者进行接口开发及主要功能联调的模拟环
  • vue2.0 关于 vue.config.js配置项详解

    const CompressionPlugin require compression webpack plugin 引入gzip压缩插件 const TerserPlugin require terser webpack plugin 代
  • 基于Selenium+Python的web自动化测试框架详解

    目录 一 什么是Selenium 二 自动化测试框架 三 自动化框架的设计和实现 四 需要改进的模块 五 总结 一 什么是Selenium Selenium是一个基于浏览器的自动化测试工具 它提供了一种跨平台 跨浏览器的端到端的web自动化
  • iOS之LLVM编译流程和Clang插件开发集成

    LLVM 简介 一 什么是 LLVM LLVM 是构架编译器 compiler 的框架系统 以 C 编写而成 用于优化以任意程序语言编写的程序的编译时间 compile time 链接时间 link time 运行时间 runtime 以及
  • 读书:《少即是多》

    少即时多 是本田直之的一本书 他还写过 杠杆阅读术 杠杆时间术 杠杆思考术 等 现在社会 物质财富的获得变得相对容易 但并没有让人更幸福 或者快乐持续的时间很短 随之而来的是担心 忧虑和负担 真正带来幸福的反而是减法 如何做减法 断舍离 L
  • 0)Visual C++2017概述

    文章目录 一 概述 二 字符集 1 C运行时库对Unicode的支持 2 C 标准库对Unicode的支持 3 Windows API 对Unicode 的支持 4 Visual C 2017对Unicode 的支持 三 SDK编程基础 1
  • 软件开发的未来已来:大数据、AI和云原生的终极融合如何引爆市场

    文章目录 1 智能化应用程序的崛起 2 实时数据分析和反馈 3 云原生的灵活性和可扩展性 4 跨行业的影响 5 数据驱动的决策 6 新的商业模式和机会 个人主页 程序员 小侯 CSDN新晋作者 欢迎 点赞 评论 收藏 收录专栏 大数据系列
  • 【LAMMPS系列】LAMMPS安装WIN并行版

    大家好 我是粥粥 LAMMPS 是一种经典的分子动力学代码 专注于材料建模 它是大型原子 分子大规模并行模拟器的首字母缩略词 LAMMPS 具有固态材料 金属 半导体 和软物质 生物分子 聚合物 以及粗粒或中等系统的势函数 它可用于模拟原子
  • 使用 KubeSkoop exporter 监测和定位容器网络抖动问题

    本文是 8 月 17 日直播的文字稿整理 微信公众号 阿里云云原生 可观看直播回放 除去文章内容外 还包括针对实际网络问题的实战环节 容器网络抖动问题发生频率低 时间短 是网络问题中最难定位和解决的问题之一 不仅如此 对 Kubernete
  • 小米手机自动进入Recovery恢复模式,且不停重启

    问题描述 2017年2月13日购买的小米手机 5S Plus 日前手机突然进入了 Recovery 模式 且重启手机又自动进入 Recovery 模式 不管它就不停的重启 连关机都做不到 即使把电用完 一直按住 电源键 和 音量键下 进入F
  • 预处理数据的方法总结(使用sklearn-preprocessing)

    预处理数 1 标准化 去均值 方差规模化 Standardization标准化 将特征数据的分布调整成标准正太分布 也叫高斯分布 也就是使得数据的均值维0 方差为1 标准化的原因在于如果有些特征的方差过大 则会主导目标函数从而使参数估计器无
  • python中字典的索引_在Python中使用范围作为字典索引

    本问题已经有最佳答案 请猛点这里访问 是否可以做如下的事情 r range 0 100 foo range 100 200 bar print r 42 gt foo 所以我想使用一个数字范围作为字典索引的一部分 为了使事情更复杂 我还想使
  • python去除最后的逗号_Python如何从打印中删除最后一个逗号(string,end=“,”)...

    forloop的输出是string for x in something some operation string x string print string 5 66 777 我使用下面的代码将它们放在同一行 pr2 然后我得到5 66
  • 微信小程序报错wx.getLocation need to be declared in the requiredPrivateInfos field in app.json

    wx getLocation need to be declared in the requiredPrivateInfos field in app json ext json env Windows mp 1 06 2301160 li
  • 基于QT的TCP通信实现(TCPServer和TCPClient)

    文章目录 一 软件介绍 1 1 TCPServer服务端界面 1 2 TCPClient客户端界面 1 3 服务端和客户端建立连接并通信演示 二 QT实现TCPServer和TCPClient 2 1 TCPClient客户端 2 1 TC
  • C#中实现神经网络算法打包dll(给Unity调用)

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