基于.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開源項目。
總結
以上是生活随笔為你收集整理的基于.NET下的人工智能|利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文读懂开源许可证异同
- 下一篇: .NET Core开发实战(第14课:自