基于.NET下的人工智能|利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境...

     每个人都习惯使用Python去完成机器学习和深度学习的工作,但是对于习惯于某种特定语言的人来说,转型不是那么容易的事。这两年我花了不少时间在Python,毕竟工作的重心也从移动开发转为机器学习和深度学习。感谢我的老板给我很大的空间去开拓新的领域,但对于不少企业这种转型需要时间,金钱的成本。我一直说,做编码就如打功夫,无论哪个门派都是一个技术栈,你寄望一套拳法可以把所有对手打倒。现阶段最好的跨平台生态已经不再是Java , 你想到的是JavaScript ,还有.NET 。或者不少人会有质疑,但现状就是这样。我今天不谈JavaScript, 重点谈谈.NET Core. 自从微软重新去把.NET 重新规划后,不少的企业或者Startup也开始试水这个既熟悉又陌生的技术环境。如果你执着地坚持着.NET , 你会为现在.NET 那七颗龙珠感到惊喜。从以往桌面/网页,到现在的移动,物联网,云计算,游戏,还有人工智能,更是一个跨平台的解决方案。

     在技术领域,一个完整的生态,少不了有不错的开源社区。现在.NET Core的开源社区在不断壮大,在机器学习和深度学习领域除了有官方支持的ML.NET外, 还有Miguel大神的TensorFlowSharp ,更可喜的是有一个基于.NET Core的机器学习和深度学习的技术开源社区SciSharp(https://github.com/SciSharp)。SciSharp 有不少和 Python 机器学习/深度学习的融入的项目,方便.NET Core的程序员无缝融入到机器学习/深度学习的环境中去,更重要一点是你可以继续用你的C#。如果你是一个.NETer,估计也会喜欢上这个开源的项目。毕竟从Jupyter Notebook的支持,到机器学习相关的Numpy.NET / NumpySharp, Pandas.NET , SciSharp , scikit-learn , 到深度学习的Tensorflow.NET , KerasuNET , Torch.NET ,还有自然语言的BotSharp , SpaCy.NET 都做了.NET Core的移植。一个技术生态好与坏,就看你的开源项目质量了。这是一个不错的开端。

      传统的机器学习/深度学习的工作方式,和我们写代码不一样,基于Jupyter Notebook,通过ICSharpCore

(https://github.com/SciSharp/ICSharpCore)你可以为Jupyter Notebook 添加C#的支持。如果你是传统程序员,你会喜欢IDE ,但在机器学习/深度学习的环境你更应该在Jupyter Notebook上开发。你可以通过Docker去部署这个环境(https://github.com/SciSharp/SciSharpCube之前社区好友分享过文章),但考虑到更高性能个人推荐还是在本机运行。我来补充下在本机的一些配置方法,你还是得安装Python, 建议还是装3.6.x / 3.7 , 还有别忘记通过pip去安装jupyter(pip3 install jupyter),。毕竟这个解决方案还是得要一个标准的Python做支持。接下来就是一些很.NET Core的事情了

  1

去下载一份

ICSharpCore(https://github.com/SciSharp/ICSharpCore)

的源码在本地编译,会生成dll,这里得提提如果你希望你的ICSharpCore环境支持ML.NET 你需要在改项目下通过dotnet add package添加ML.NET的支持

2

如果快乐是一种发明,它很容易被一再发明。by 小饭

3

去kernel-spec目录下修改kernel.json , 指定好刚才编译生成的ICSharpCore.dll的路径

4

回到ICSharpCore目录下执行 jupyter kernelspec install kernel-spec --name=csharpcore  通过运行语句jupyter kernelspec list 检查是否成功添加     

   我们通过启动jupyter notebook来测试下环境,通过New 可以看到选项已经添加C#的支持(SciSharpCube这个名字不错,所以我省得再修改了,当然你觉得不够爽就自己通过修改kernel.json去修改),选中SciSharpCube就可以在Jupyter Notebook使用C#代码

      因为ICSharpCore结合Roslyn编译器进行使用,所以你引用库时,也需要通过#r 进行使用,看两个基于ML.NET的notebook,是不是很cool呢?

      回头谈一些细节,现在SciSharp对于不同框架的绑定,无非两种,第一种像TensorFlow.NET是基于TensorFlow原生的C库做绑定,这种做法的优点是对Python的依赖少,更像原生实现,第二种就直接基于pythonnet(https://github.com/pythonnet/pythonnet)这个扩展去实现,这种做法就是桥接只需要做一些简单的语言扩展就可以快速实现功能,但有一个问题就是对本机Python环境依赖极高需要为不同版本的Python版本设置不同的dll,还有就是不够原汁原味了。但这两种方法其实对环境变量的设置都有要求,如TensorFlow.NET原生 就别忘记去设置TF的C库放置的环境变量路径,还有如依赖于pythonnet的Keras.NET, Numpy.NET就别忘记指定好你本机Python版本的lib文件夹路径,否则就会出现很多问题。我可是花了不少时间的。

       SciSharp在medium上有不少介绍和示例(https://medium.com/scisharp),建议大家都去看看,当然我也会中英文同步发一些原创文章给大家,也建议更多人在社区贡献代码和示例让它成为更优秀的.NET开源项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ValueError: check_hostname requires server_hostnamejie解决方案

原因: 1. 下载包带的插件等级高了 2. 网络代理没关 3.pip误删 解决方案: 对应上面原因: 1.终端(terminal)输入代码 pip install urllib31.25.112. 3.针对第三点 https://blog.csdn.net/weixin_53051556/article/details/118566675

万稞pw80线切割编程软件_模具设计编程培训哪些内容?

模具设计编程培训哪些内容?一.UG、PROE三维产品设计班1)产品设计流程;2)三维造型、各类产品结构设计3)产品表面处理工艺4)UG、PROE 3D造型、抄板、工程图、逆向工程、点云处理。5)100多套家电、医疗器械、汽车、手机、电动工具设计案例讲解二…

UVA - 548 Tree

输入一个二叉树的中序和后序遍历,请你输出一个叶子节点,该叶子节点到根的数值总和最小,且这个叶子是编号最小的那个。 输入: 您的程序将从输入文件中读取两行(直到文件结尾)。第一行是树的中序遍历值序列,第二行是树的后序遍历值序…

.NET Core开发实战(第14课:自定义配置数据源:低成本实现定制化配置方案)--学习笔记...

14 | 自定义配置数据源:低成本实现定制化配置方案这一节讲解如何定义自己的数据源,来扩展配置框架扩展步骤1、实现 IConfigurationSource2、实现 IConfigurationProvider3、实现 AddXXX 扩展方法,用来作为注入的快捷方式源码链接:…

uml类图例子_转:(中文命名)UML类图新手入门级介绍

下文转于 2019-05-10。2020-03-10 发觉本出自2007 年出版的《大话设计模式》一书(作者: 程杰)第一章。于是将文末原链接删去。转载注: 中文命名的优势在UML图这样专注业务逻辑且完全符号化语法(与英语无关)的工具中特别…

API是什么

定义: API 是用于构建应用程序软件的一组子程序定义,协议和工具。一般来说,这是一套明确定义的各种软件组件之间的通信方法。 接口interface: 各个组件发生交互的区域 协议protocol: 规定了各部分之间如何进行交流的一系列规则的集合 格式format: …

瓷砖铺放-dfs

题目描述 有一长度为N(1< &#xff2e;< 10)的地板&#xff0c;给定两种不同瓷砖&#xff1a;一种长度为1&#xff0c;另一种长度为2&#xff0c;数目不限。要将这个长度为N的地板铺满&#xff0c;一共有多少种不同的铺法&#xff1f; 例如&#xff0c;长度为4的地面一共…

2020年学python_Python学习路线图(2020年最新版)

PythonPython开发Python语言Python学习路线图(2020年最新版)这是我刚开始学习python时的一套学习路线&#xff0c;从入门到上手。(不敢说精通&#xff0c;哈哈~)希望对大家有帮助哈~一、Python入门、环境搭建、变量、数据类型二、Python运算符、条件结构、循环结构三、Python函…

开源、免费、企业级的SiteServer CMS .NET CORE 7.0 预览版发布

经过连续不断地开发与完善&#xff0c;SiteServer CMS .NET CORE 版本终于在今天与大家见面了&#xff0c;版本为7.0.0-preview1&#xff0c;我们将在未来几个月收集大家的反馈&#xff0c;修复与完善产品&#xff0c;最终发布能够稳定运行的7.0正式版。基于.NET CORE的跨平台性…

equals, hashCode, toString方法重写,深入探究equals

首先是超类Employee: package chapter5_inheritance.equals;import java.time.LocalDate; import java.util.Objects;public class Employee {private String name;private double salary;private LocalDate hireDay;public Employee(String name, double salary, int year, i…

UVA - 839 Not so Mobile

输入一个树状天平&#xff0c;根据力矩相等原则判断是否平衡。如图所示&#xff0c;所谓力矩相等&#xff0c;就是Wl DlWr Dr,其中Wl和Wr分别为左右两边砝码的重量&#xff0c;D为距离。 采用递归&#xff08;先序&#xff09;方式输入&#xff1a;每个天平的格式为Wl ,Dl,Wr,…

.NET Core 3.0 即将结束生命周期,建议迁移 3.1

.NET Core 官方发布博客&#xff0c;说明 .NET Core 3.0 即将结束生命周期&#xff0c;建议开发者迁移到 3.1 版本。.NET Core 3.0 于 2019 年 12 月 3 日发布&#xff0c;这是一个 Current 版本而不是 LTS 版本&#xff0c;将于今年 3 月 3 日 EOL&#xff08;End of Life&…

CoreJava 笔记总结-第三章 Java的基本程序设计结构

CoreJava 笔记总结 文章目录CoreJava 笔记总结第三章 Java的基本程序设计结构数据类型1. 整型2. 浮点类型3. char类型4. boolean类型变量与常量1. 变量2. 常量3. 枚举类型运算符关系和boolean运算符数学函数与常量强制类型转换字符串空串与null串码点与代码单元构建字符串输入与…

python高级编程知识点_(转)python 高级编程技巧学习笔记

转自https://www.jianshu.com/p/104cec085611&#xff0c;部分图出不来&#xff0c;mark一下&#xff0c;关键时候供查看。第二章 数据结构相关话题2.1、筛选数据两种方式filter函数&#xff1a;filter(lambda x: x>0, data)注意&#xff1a;python3 需要把filter的结果转为…

.NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...

15 | 选项框架&#xff1a;服务组件集成配置的最佳实践这一节讲解如何使用选项框架来处理服务和配置的关系选项框架的特性&#xff1a;1、支持单例模式读取配置2、支持快照3、支持配置变更通知4、支持运行时动态修改选项值在设计系统的时候需要遵循两个原则&#xff1a;1、接口…

UVA - 572 Oil Deposits-dfs找连通块

Discription 给定一个包含 *的二维数组&#xff0c;输出有几个是联通的&#xff0c;如果一个在另外一个相邻的八个方向则视作相邻。 Input 包含 *的二维数组。 Output 输出联通的个数 解题思路&#xff1a; 从每一个格子出发&#xff0c;递归遍历它周围的格子&#xff0c;每次…

HTMLCSS 超简单的前端设计入门-1!

第一个网页 文章目录第一个网页注释元素(标签,标记)元素的嵌套标准的文档结构语义化什么是语义化为什么需要语义化?文本元素hpspanpreHTML 实体a元素href 属性target属性路径的写法站内内资源和站外资源绝对路径和相对路径Emmet 注释 注释不参与运行 书写方式(html) <!-…

【朝夕技术专刊】WebApi部署多服务器配置Nginx负载均衡

欢迎大家阅读《朝夕Net社区技术专刊》第3期我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为首期读者&#xff0c;文末福利不要错过哦&#xff01;01PARTCoreWebApi教程本地演示环境Vi…

sprintf()函数的使用

sprintf&#xff08;&#xff09;&#xff1a; 函数功能&#xff1a;把格式化的数据写入某个字符串 函数原型&#xff1a;int sprintf( char buffer, const char format [, argument] … ); 返回值&#xff1a;字符串长度&#xff08;strlen&#xff09; 例子&#xff1a; cha…

CoreJava 笔记总结-第四章 对象与类

文章目录第四章 对象与类使用预定义类对象与对象变量Java库中的LocalDate类更改器方法和访问器方法用户自定义类用var声明局部变量使用null引用隐式参数与显示参数基于类的访问权限私有方法final实例字段静态字段与静态方法静态字段静态常量静态方法工厂方法main方法方法参数对…