作者 | 夕颜

出品 | AI科技大本营(ID:rgznai100)

导读:.NET 框架是由微软开发,致力于敏捷软件开发、快速应用开发、具平台无关性和网络透明化的软件框架,目前全球有 620 万开发者在使用 .NET 开发程序。然而,开发者在学习、开发和应用 AI 时,会发现市面上少有基于 .NET 的 AI 开发类库、人工智能应用技术平台和商业支持服务。在这样的背景下,SciSharp AI 开源社区应运而生,它打造一个基于 .NET 的机器学习生态,推出并开源了多个颇受欢迎的基于 .NET 的机器学习项目和工具,比如 TensorFlow.NET 就被谷歌列入 TensorFlow 官网,推荐给全球开发者。

SciSharp 是怎样的一个社区?它是如何构建一个基于 .NET 的机器学习生态?它在做的事情对开发者来说有何意义?本次,AI 科技大本营与 SciSharp 核心团队成员,包括 SciSharp 社区产品运营负责人,原 “微信”技术专利发明人George Zhao、 TensorFlow.NET 发起人和主要贡献者Eric Chen、NumSharp 主要贡献者 Eli Belash、Torch.NET与Numpy.NET的主要贡献者Meinrad Recheis和 ICSharpCore主要贡献者Kerry Jiang聊了聊,更加深入地了解这个 AI 社区及其产品。

SciSharp为开发者做什么?

SciSharp 是一个非盈利人工智能开源社区,目前核心开发者有 5 人,他们分别来自以色列、奥地利、澳大利亚、美国和中国,其他 35 名贡献者则来自德国、印度等 15 个国家和地区。目前,整个社区主要是靠成员各自的兴趣驱动,管理也是由团队人员自发共同承担,是一个完全透明和自治的开源技术社区。

众所周知,C# 和 JAVA 是目前企业系统里最流行的两大编程语言,现在,Java 机器学习生态里已经有不少社区和团队在做相关产品和服务,如斯坦福的 CoreNLP、DL4J 的机器学习库等,并且做得都不错。唯独在 .NET 领域,优秀的产品非常缺乏,而且,虽然有 Accord.NET、Deedle、ML.NET 和其它一些零散的库可供开发者使用,但是它们存在着明显的缺陷,造成目前的开源库无法持续发展和创新,陷入僵局。在深度学习领域,更是 Python “独霸天下”的局面,让人以为做机器学习,就必须用 Python,做大数据就必须用 Scala或Java。这让很多 .NET 开发者感到很不便,因此,SciSharp 就开始试着手建立一个基于.NET(以 C# 开发语言为主)的机器学习生态社区。

NumSharp 的主要贡献者,来自以色列的工程师Eli Belash 回顾了他刚开始从事机器学习和人工智能开发时的感受:“我了解到 .NET 多年来缺乏可以与 Python 相匹敌的语言功能。微软的 ML.NET 仍处于早期阶段,微软的 CNTK(图形计算库)刚刚中断。那时,你无法用 C#语言编写 ML(机器学习)算法,而用其他语言,如 Python 或 R 做这些事非常容易。因此,我们缺乏基于.NET 的可靠的解决方案来编写机器学习算法。当机器学习成为趋势时,C# 目前落后于 Python 和 Java。”

在这种背景下,SciSharp 社区成立了,目的主要是为了让 .NET 开发者在当前火热的 AI 热潮中能够使用最新的 AI 技术,而不用花很长的时间学习和使用 Python 机器学习生态里的工具,降低 .NET 开发者入门机器学习的门槛,让他们能快速把 AI 能力无缝融入到现有的生产系统里。

打造基于.NET的机器学习生态

SciSharp 的核心理念是:打造一个基于 .NET 的机器学习生态,提供一个和 Python 生态体验一致的工具库,让模型迁移更容易、学习曲线最低。为了达到这个目的,SciSharp 从最基本的张量计算库 NumSharp 开始构建,到 TensorFlow Binding,再到吸纳其它深度学习库 SiaNet, 做 ArrayFire.NET,最后到开发ICSharpCore以支持Jupyter Notebook调试。团队的心愿一致,本着以精卫填海的精神,尽可能把 .NET 机器学习生态进一步完善。

NumSharp 的主要贡献者Eli Belash 表示,目前,Python 是 ML 开发和研究的主要语言。在阅读机器学习相关的论文时,你会发现作者很可能会使用 Tensorflow、Pytorch 和/或Numpy 等库并用 Python 语言编程来实现。在这样的情况下,重新造轮子可能并不是聪明的做法。如果现在流行的 Python 库运行良好,我们没理由去思考别的方法。

这就是为什么 SciSharp 决定迁移 ML 最流行的 Python 库:

  • Numpy 的.NET版NumSharp
  • TensorFlow 的.NET 移植版TensorFlow.NET
  • 与Pandas 对应的Pandas.NET

上面提到的 3 个库提供了从头开始编写 ML 算法的完整解决方案,SciSharp 的重点之一便是能够兼容用 Python 编写类库的所有机器学习算法,并尽可能无缝地在 5 分钟内将其迁移到 C#。C# 是微软公司发布的一种面向对象的、运行于 .NET Framework 之上的高级程序设计语言。随着.NET Core 3.0 的即将发布,这个最初发布于 2016 年的平台终于有了最新的主版本,该平台具有通用性、模块化、跨平台和开放源代码的特性。这样,除了 Python 和 Java,开发者同样可以使用 C#完成机器学习任务。

最受欢迎的项目

TensorFlow.NET

SciSharp 上现已有几十个基于 .NET 的项目供开发者使用,从 star 数和 fork 上来看,最受欢迎的当属 TensorFlow.NET(简称TF.NET) 和 NumSharp。

其中,TensorFlow.NET 近期被谷歌列入 TensorFlow 官网推荐给全球开发者,并被微软的 ML.NET 1.3.1 集成,作为ML.NET里深度学习部分的重要组件,目前已经完成了用迁移学习算法进行图像分类的功能,并计划在年底完成图像对象检测的功能,届时将会对全球开发者公布。

微软在官博中介绍了 TensorFlow.NET :

为了使用TensorFlow,ML.NET 内部依赖于 Tensorflow.NET Library。

Tensorflow.NET Library 是一个开源和底层API 库,提供 TensorFlow 的 .NET 标准绑定。

微软(ML.NET团队)与 TensorFlow.NET Library 团队密切合作,不仅为 ML.NET 用户提供更高级别的 API,并帮助 Tensorflow.NET Library 作为一个开源项目进行改善。

受到谷歌和微软的双重肯定,与TensorFlow.NET 具有易用性的特点分不开。

TensorFlow.NET 保持和 Python 代码几乎一样的语法和接口,让目前流行的模型能够快速移植到 TF.NET。开发者可以很容易地在 .NET 上运行用 Tensorflow 开发的模型。日前,社区开发者 Kerry Jiang 开发了支持 Jupyter 的组件,使用 Jupyter Notebook 一样可以在线开发和调试 C# 语言程序和 TensorFlow.NET,并可以实时呈现绘图的效果。

据介绍,目前主要有 2 个核心工程师在开发 TensorFlow.NET(另外一名为奥地利工程师 Meinrad Recheis),其目标是做成 TensorFlow 的全功能绑定,即基于.NET提供与Python版的TensorFlow一样的接口和功能。

做成这样一个庞大的项目并非易事,因为 TensorFlow 本身是个巨大的库,能完成从文件读取、矩阵计算、梯度计算、图像变换和GPU、TPU 并行计算和分布式网络计算的能力,包含上千个 API。Eric Chen讲到,要全部完成这些 API 的迁移很有挑战性,包括语言特性造成的困难,比如很难完全将 TensorFlow 迁移到 C#,同时保持它与原始实现完全一样。这导致该团队决定写入Tensorflow 的 C ++ API 绑定,这样,用户可以使用 Tensorflow.NET 时会感觉和使用 Python 基本没有差别。另外,接口绑定对开发人员是完全透明的。

目前,TensorFlow.NET 已经可以开发神经网络模型,随着 API 的慢慢完善,能给数据科学家提供的工具函数也将越来越完善。

NumSharp

从 star 数和 fork 数量来看,NumSharp 是 SciSharp 中除 TensorFlow.NET 之外第二大受欢迎的项目。

NumSharp 是 Python 流行库 numpy 的纯 C# 端口,目的是提供快速、零拷贝和 n 维计算。目前,它是唯一一个为 .NET 编写的稳定库,能够在 n 维之间执行数学运算,如矩阵乘法、换位、加法等,同时完全支持传播、非复制 slides、特定的轴向迭代法;在 .NET 中可用的所有数字类型中,NumSharp 是 SciSharp 所有库的基础(包括TensorFlow.NET) ,并以多种形式被很多项目引用,比如 BotSharp、TensorFlow.NET 和 Pandas.NET。再如 TF.NET 计算之后,结果以 NumSharp 的格式(NDArray)返回。NumSharp 和 Numpy 一样,通常在 TensorFlow.NET 之前或之后用于清理、操作一般的特征工程。

另外,SciSharp 上还有 Keras.Net、Torch.NET 等项目。与 TF.NET 和 NumSharp 不同,Keras.Net 和 Torch.Net 几乎完全由该团队自己编写的生成器生成。它们使用Pythonnet(CPython运行时绑定库)从 C# 调用 Python 代码。因为使用的是用 Python 编写的原始代码,所以与原始库完全相同,且可以轻松更新。使用这些库的优点是整个 C# API 都可用,但另一方面,在某些情况下必须从 C# 调用 Python 的开销会影响性能。

值得注意的是,这些库不能直接与 TF.NET 或 NumSharp 兼容,但是该团队计划在所有库之间添加对移动内存的支持,而无需复制或进行任何额外的工作,感兴趣的同学可以期待一下。

AI开发者套件迭代与完善计划

AI 开发者套件也是机器学习开发者最关心的,据了解,SciSharp AI 开发套件目前包括视觉、NLP 支持、高端 API 等模块,George 透露未来还可能会开发Keras.NET Native版本,让开发者使用起来更容易。这些库其实都是根据实际应用随时添加,比如目前该团队正在做 Object Detection, 就需要计算机图像处理方面的库,如果在开源库里找不到合适的库,SciSharp 就会考虑做基于 .NET 的项目。

SciSharp AI开发套件的每个组件目前都有独立的发布周期,其中 TensorFlow.NET 最近一次迭代是配合 ML.NET 的发布,在集成过程当中发现了一些问题,并做了及时调整。9 月份,ML.NET 版本发布后会完全融合 TF.NET。

而 NumSharp 则已被完全重写,以确保该库经过充分测试,且功能与 NumPy 相当。NumSharp 将内部存储替换为非托管内存,以便在库之间轻松转换并提高性能。未来,该团队计划逐步迁移更多功能还计划通过创建 IL-Generator 以尽可能提高性能。

Tensorflow.NET 则是进行 Tensorflow 1.40 版本的绑定,现在功能已经比较完备。未来,Tensorflow.NET 将进行 Tensorflow 2.0 的绑定。

基于.NET的AI智能应用市场还是一片“处女地”

正如文章开篇所说,目前,在 .NET 领域虽然存在一些类似 Accord.NET、Deedle以及其它一些零散的库,它们能用,但是缺陷也很明显,比如:1)存在性能问题;2)没有开发者持续维护;3)和流行的 Python 库语法差异巨大,即便是微软大神米格尔亲自操刀制作的TFSharp,也只能做模型推理,不能开发模型和训练模型,目前正处于无人维护的状态。

鉴于以上现状,基于.NET的 AI 智能应用市场几乎还是一片空白的“处女地”。

与市面上的其他产品相比,SciSharp 具有一个特点——技术门槛高。这里,技术门槛高是指在众多的语言绑定里,谷歌官方只推荐 Python binding, 因为只有 Python binding 能完全发挥 Tensorflow 计算功能的上层 API。Python 在其中扮演着非常重要的角色,它负责把模型的计算过程翻译成 TensorFlow 的计算图,这些计算图有的非常复杂,比如一个优化过的 CNN模型包含的计算结点有 15, 000个,这些结点都是用 Python 语言调用 C API 来完成的,其它语言绑定 Java、Scalar 和最新的 Swift 均不能完整构建如此复杂的计算图,因此,SciSharp 在这方面比其他产品略胜一筹。

总之,这片待开发的基于 .NET 的 AI 智能应用“处女地”已被 SciSharp 看到,未来,像 SciSharp 这样的技术社区能够为开发者提供哪些更实用、更有价值的产品和服务,我们拭目以待。

C#也能做机器学习?基于.NET的AI智能应用市场还是一片“处女地”相关推荐

  1. c# 分类 机器学习_C#也能做机器学习?基于.NET的AI智能应用市场还是一片“处女地”...

    作者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 导读:.NET 框架是由微软开发,致力于敏捷软件开发.快速应用开发.具平台无关性和网络透明化的软件框架,目前全球有 620 万开发 ...

  2. 基于K210开源AI智能跟随云台OpenFollow(一) 项目介绍

    OpenFollow点击这里 1. 项目介绍 OpenFollow是一个基于嘉楠的AI芯片K210实现的一个跟随云台. 硬件上,他搭载了K210芯片,一个控制云台旋转跟踪的电机,以及一块8000毫安的 ...

  3. 基于51单片机的智能光控路灯设计及设计报告

    自己做的基于51单片机的智能光控路灯设计及设计报告,滑动变阻器模拟光敏电阻,adc0832检测电压,lcd1602做控制面板,自动亮灯的光强范围可调 包括源代码.仿真设计报告. ID:69665037 ...

  4. 第四范式陈雨强:做机器学习平台天然就是新基建丨新基建50人

    作者 | 刘燕 采访嘉宾 | 陈雨强,第四范式联合创始人.首席研究科学家 InfoQ 特别面向新一代信息技术领域技术中坚群体正式推出的 「中国技术力量」 之「新基建 50 人」栏目持续进行中,本期嘉宾 ...

  5. 无基础人员转行做机器学习可以吗?

    无基础人员转行做机器学习可以吗?机器学习需要一定数学基础,没有相关的了解需要重新学习.转行机器学习不适用所有人,可不可以转行需要具体结合自身的情况.入门机器学习有一定的门槛要慎重决定. 任何机器学习系 ...

  6. opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统

    教你从零开始做一个基于深度学习的交通标志识别系统 基于Yolo v3的交通标志识别系统及源码 自动驾驶之--交通标志识别 在本文章你可以学习到如何训练自己采集的数据集,生成模型,并用yolo v3算法 ...

  7. ML机器学习基于树的家族

    ML机器学习基于树的家族 目录 决策树模型与学习 特征选择 决策树的生成 3.1 决策树的编程实现 3.2 画出决策树的方式 决策树的剪枝 DBGT 随机森林 参考资料: 机器学习实战 统计学习方法 ...

  8. 怎样用cocos2d-x做一个基于地图块的游戏(Part One)

    怎样用cocos2d-X做一个基于地图块的游戏 (Part One) 在这个分为上下两部分的教程中,我们将介绍如何使用Cocos2D-X和地图编辑器做一款基于地图块的游戏.在这个简单的地图块游戏里,一 ...

  9. 在图数据上做机器学习,应该从哪个点切入?

    作者 | David Mack 编译 | ronghuaiyang 来源 | AI公园(ID:AI_Paradise) [导读]很多公司和机构都在使用图数据,想在图上做机器学习但不知从哪里开始做,希望 ...

最新文章

  1. iOS autolayout 约束冲突添加symbol breakpoint
  2. 美团点评:基于Druid的Kylin存储引擎实践
  3. 数组的定义格式一_动态初始化
  4. byte[]、sbyte[]、int[]以及Array的故事
  5. 微课|中学生可以这样学Python(例11.2):tkinter猜数游戏(1)
  6. 关于用C#编写ActiveX控件1
  7. Git中的‘HEAD’是什么?- Git名词解释
  8. 复合存储引擎的设计和实现(包含ORM和内容存储)
  9. oracle 监听 开机启动命令,如何让oracle DB、监听和oem开机启动(dbstart)
  10. xp系统打印服务器自动关闭,XP系统服务管理Print spooler自动关闭的解决办法
  11. 微博转载-是时候了,也该做个了结了。
  12. Java制作JDK8文档搜索引擎项目并部署到阿里云服务器
  13. 一网打尽!所有PMP的计算公式都在这里啦,赶紧学起来(1)
  14. 实时数据库与关系数据库的对比分析
  15. 眼见不一定为实!18个神奇的视错觉,看完不相信眼睛系列
  16. spf打包解包_2020最新CentOS(linux下)安装7-Zip(7za压缩软件)以及解压命令,只打包不压缩,加密的方法...
  17. [leetcode]1140.捡石头(动态规划做法)
  18. centos7部署prometheus+exporter+grafana+Alertmanager+企业微信
  19. python 火车票查询,Python3实现火车票查询工具
  20. 中国科学计算机品牌,第一届“中国科技名牌500强”名单揭晓

热门文章

  1. cesium 直接加载 geotiff 影像图
  2. 今天起,上海用户可以用滴滴App免费打无人车了
  3. python求解立方根_求解立方根
  4. 【VS开发】error C2220: 警告被视为错误 - 没有生成“object”文件
  5. 准备情人节礼物比写代码难?来看看IT直男给女友们的礼物
  6. 四种存储结构及其特点
  7. 跟9位爱奇艺年轻的技术、产品、设计同学聊了聊,他们这样定义“青年”
  8. HDOJ:1863畅通工程
  9. console,控制台也能玩出花样(console操作大全)
  10. linux keynav 鼠标可以扔掉了键盘控制鼠标