C#也能做机器学习?基于.NET的AI智能运用市场还是一片“处女地”
作者头像
  • 兰舒凡
  • 2019-10-23 18:36:14 1

.NET框架下的AI开发新生态

.NET框架是由微软开发的一个灵活的软件开发平台,具备快速应用开发、平台无关性和网络透明性等优点,目前全球有620万开发者使用.NET进行程序开发。然而,在学习、开发和应用AI技术的过程中,开发者们发现市面上很少有基于.NET的AI开发库、人工智能技术平台和商业支持服务。在这种背景下,SciSharp AI开源社区应运而生,旨在构建一个基于.NET的机器学习生态系统,推出并开源多个颇受欢迎的基于.NET的机器学习项目和工具,例如TensorFlow.NET已经被谷歌列入TensorFlow官网,推荐给全球开发者。

SciSharp为开发者做什么?

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

众所周知,C#和Java是企业系统中最流行的两种编程语言。目前,Java机器学习生态系统中有许多社区和团队在进行相关产品的开发和服务,如斯坦福大学的CoreNLP和DL4J的机器学习库等,都取得了不错的成果。但在.NET领域,优秀的产品却十分稀缺,尽管有Accord.NET、Deedle、ML.NET和其他一些零散的库可供开发者使用,但这些库存在明显的缺陷,导致开源库无法持续发展和创新,陷入僵局。在深度学习领域,Python更是占据了主导地位,这使得许多.NET开发者感到不便。因此,SciSharp开始着手建立一个基于.NET(以C#为主要编程语言)的机器学习生态系统。

NumSharp的主要贡献者Eli Belash回忆起自己刚开始从事机器学习和人工智能开发时的感受:“我发现.NET多年来缺乏与Python相媲美的语言功能。微软的ML.NET仍处于早期阶段,CNTK(图形计算库)也刚刚中断。那时,你无法用C#语言编写机器学习算法,而用其他语言如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是机器学习开发和研究的主要语言。在阅读机器学习相关的论文时,你会发现作者很可能会使用Tensorflow、Pytorch等库,并用Python语言编程来实现。在这种情况下,重新造轮子可能并不是明智之举。如果当前流行的Python库运行良好,我们没有理由去考虑其他方法。

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

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

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

最受欢迎的项目

TensorFlow.NET

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

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

微软在其官方博客中介绍了TensorFlow.NET: - 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成为可能,并可以实时呈现绘图效果。

目前,TensorFlow.NET有两个核心工程师在开发(另一位是奥地利工程师Meinrad Recheis),他们的目标是实现TensorFlow的全功能绑定,即基于.NET提供与Python版TensorFlow相同的接口和功能。

NumSharp

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

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

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

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

SciSharp AI开发套件的每个组件目前都有独立的发布周期。最近一次迭代是配合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等,但它们存在功能问题、缺乏持续维护以及与流行Python库语法差异巨大的缺陷。鉴于这些现状,基于.NET的AI智能应用市场几乎还是一片空白。

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

总之,这片待开发的基于.NET的AI智能应用市场已被SciSharp看中,未来,像SciSharp这样的技术社区将为开发者提供更具实用性、更高价值的产品和服务,让我们拭目以待。

采访嘉宾

  • George Zhao:SciSharp社区产品运营负责人,原“微信”技术专利发明人。
  • Eric Chen:微软.NET Foundation成员,TensorFlow.NET项目的维护者、主要代码贡献者,BotSharp项目的次要代码贡献者。
  • Eli Belash:以色列空军技术学院工程师,NumSharp项目的次要代码贡献者、项目维护者。
  • Meinrad Recheis:Torch.NET、Numpy.NET项目的原创作者和维护者,NumSharp、TensorFlow.NET项目的次要代码贡献者。
  • Deepak Kumar Battini:Keras.NET的维护者,TensorFlow.NET和NumSharp的代码贡献者。
  • Kerry Jiang:SuperSocket作者,eBay资深软件工程师。SciSharp旗下项目ICSharpCore和SharpPythonCompiler的次要开发人员。

公开课预告

为让大家更深入了解SciSharp项目,AI科技大本营邀请了微软技术社区区域总监卢建晖,进行一场详细的讲解。

  • 课程标题:《SciSharp:.NET Core下的人工智能开源项目》
  • 课程时间:10月31日,20:00-21:30
  • 课程讲师:卢建晖,微软技术社区区域总监,微软人工智能最有价值专家,Xamarin亚洲首位最有价值专家
  • 课程大纲
    1. 机器学习和深度学习基础知识介绍
    2. SciSharp技术介绍
    3. SciSharp下的Jupyter Notebook - ICSharpCore
    4. SciSharp下的机器学习/深度学习示例
  • 课程链接点击这里

欢迎参加公开课,并加入交流群。

    本文来源:图灵汇
责任编辑: : 兰舒凡
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
C#处女地运用基于机器还是智能学习市场NET
    下一篇