每个人都习惯使用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开源项目。

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

  1. 利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境

    每个人都习惯使用Python去完成机器学习和深度学习的工作,但是对于习惯于某种特定语言的人来说,转型不是那么容易的事.这两年我花了不少时间在Python,毕竟工作的重心也从移动开发转为机器学习和深度学 ...

  2. AI:人工智能领域之AI基础概念术语之机器学习、深度学习、数据挖掘中常见关键词、参数等5000多个单词中英文对照(绝对干货)

    AI:人工智能领域之AI基础概念术语之机器学习.深度学习.数据挖掘中常见关键词.参数等5000多个单词中英文对照(绝对干货) 导读      本博主基本收集了网上所有有关于ML.DL的中文解释词汇,机 ...

  3. DL之IDE:深度学习之计算机视觉开发环境搭建的详细流程(Ubuntu16.04+cuda9.0+cuDNN7.4.2+tensorflow_gpu)

    DL之IDE:深度学习之计算机视觉开发环境搭建的详细流程(Ubuntu16.04+cuda9.0+cuDNN7.4.2+tensorflow_gpu) 目录 1.安装nvidia驱动 2.安装CUDA ...

  4. [人工智能-深度学习-41]:开发环境 - GPU进行训练安装与搭建(Pytroch、TensorFlow、Nvidia CUDA)详细过程

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  5. TensorFlow深度学习应用开发实战(深度学习简介和开发环境搭建)

    一.深度学习的发展及其应用 1.1 深度学习的发展历程 1956年,John McCarthy(约翰·麦卡锡)等人在美国达特茅斯学院(Dartmounth College)开会探讨如何使用机器模拟人的 ...

  6. 在Windows7/10上快速搭建深度学习框架Caffe开发环境

    之前在 http://blog.csdn.net/fengbingchun/article/details/50987353 中介绍过在Windows7上搭建Caffe开发环境的操作步骤,那时caff ...

  7. 人工智能学习总结(1)——人工智能的三个分支:认知、机器学习、深度学习

    人工智能进入了一切领域--从自动驾驶汽车,到自动回复电子邮件,再到智能家居. 你似乎可以获得任何商品(例如医疗健康,飞行,旅行等),并通过人工智能的特殊应用使其更加智能.所以除非你相信事件具有终结者般 ...

  8. 人工智能的三个分支:认知、机器学习、深度学习

    人工智能进入了一切领域--从自动驾驶汽车,到自动回复电子邮件,再到智能家居. 你似乎可以获得任何商品(例如医疗健康,飞行,旅行等),并通过人工智能的特殊应用使其更加智能.所以除非你相信事件具有终结者般 ...

  9. 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】

    基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...

最新文章

  1. android有用的知识
  2. 瞬间几千次的重复提交,我用 Spring Boot + Redis 扛住了!
  3. 你知道Java中final和static修饰的变量是在什么时候赋值的吗?
  4. 台积电预计汽车芯片短缺在下一季度将有明显改善 他们已协调产能支持
  5. web前端工作笔记008---jQuery table jstable的使用方法,字符串太长显示...初始化显示数据
  6. 我在30岁之前做了三件骄傲的事
  7. 2018春招-赛码网-例题-水仙花数
  8. Windows Message Queue 优先队列
  9. 云锁卸载 linux,ubuntu下云锁卸载出错后无法重新安装的解决办法checking installation environment:...
  10. 一个IT技术人如果转型做自由职业可以做哪些方向?
  11. 【狂神说Java】Redis
  12. android 发短信 oppo,OPPO R11短信发送失败怎么办?OPPO手机短信发送失败的解决方法...
  13. 企业群发短信时为什么要找短信平台公司而不是直接找运营商发送
  14. 【SQL】利用sql语句在mysql的表中插入date类型的数据,
  15. Bluetooth Baseband介绍
  16. vue上下全屏翻页_全屏翻页布局
  17. oracle 12C ADG Far Sync 配置实验
  18. oracle 内存错误的是什么意思,java - 是什么导致此JMS错误连接到OracleAQ? - 堆栈内存溢出...
  19. matlab自带的神经网络例子,MATLAB-network m
  20. 云开发【星座测评小程序+流量主】星座运势小程序源码

热门文章

  1. DB2 SQL 递归实现多行合并
  2. sqlserver2008 创建支持文件流的数据库
  3. JDBC 程序的常见错误及调试方法
  4. Eclipse设定文件的默认打开方式
  5. ADO.NET Entity Framework学习笔记(2)建模[转]
  6. HDOJ 1875 HDU 1875 畅通工程再续 ACM 1875 IN HDU
  7. 6、struts.properties配置详解
  8. 找到特定ip地址 修改ip_您如何找到网站的IP地址?
  9. 【数学题】男女的比例
  10. 【数据库中间件】MyCat分表分库规则实现