10.23 C#也能做機器學習?基於.NET的AI智能應用市場還是一片“處女地”

作者 | 夕顏

出品 | 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裡深度學習部分的重要組件,目前已經完成了用遷移學習算法進行圖像分類的功能,並計劃在年底完成圖像對象檢測的功能,屆時將會對全球開發者公佈。

C#也能做機器學習?基於.NET的AI智能應用市場還是一片“處女地”

微軟在官博中介紹了 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 這樣的技術社區能夠為開發者提供哪些更實用、更有價值的產品和服務,我們拭目以待。

採訪嘉賓:

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。

課程題目:《SciSharp:.NET Core 下的人工智能開源項目》

課程時間:10 月 31 日,20:00--21:30

課程講師:盧建暉,微軟技術社區區域總監,微軟人工智能最有價值專家,Xamarin 亞洲首位最有價值專家

課程大綱:

1、 機器學習和深度學習基礎知識介紹

2、 SciSharp 技術棧介紹

3、 SciSharp 下的 Jupyter Notebook - ICSharpCore

4、 SciSharp 下的機器學習/深度學習示例

課程鏈接:https://edu.csdn.net/huiyiCourse/detail/1078

公開課”加入交流群。


分享到:


相關文章: