利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境
?? ? ?每個人都習慣使用Python去完成機器學習和深度學習的工作,但是對于習慣于某種特定語言的人來說,轉(zhuǎn)型不是那么容易的事。這兩年我花了不少時間在Python,畢竟工作的重心也從移動開發(fā)轉(zhuǎn)為機器學習和深度學習。感謝我的老板給我很大的空間去開拓新的領域,但對于不少企業(yè)這種轉(zhuǎn)型需要時間,金錢的成本。我一直說,做編碼就如打功夫,無論哪個門派都是一個技術棧,你寄望一套拳法可以把所有對手打倒?,F(xiàn)階段最好的跨平臺生態(tài)已經(jīng)不再是Java , 你想到的是JavaScript ,還有.NET ?;蛘卟簧偃藭匈|(zhì)疑,但現(xiàn)狀就是這樣。我今天不談JavaScript, 重點談談.NET Core. 自從微軟重新去把.NET 重新規(guī)劃后,不少的企業(yè)或者Startup也開始試水這個既熟悉又陌生的技術環(huán)境。如果你執(zhí)著地堅持著.NET , 你會為現(xiàn)在.NET 那七顆龍珠感到驚喜。從以往桌面/網(wǎng)頁,到現(xiàn)在的移動,物聯(lián)網(wǎng),云計算,游戲,還有人工智能,更是一個跨平臺的解決方案。
? ? ? ?在技術領域,一個完整的生態(tài),少不了有不錯的開源社區(qū)?,F(xiàn)在.NET Core的開源社區(qū)在不斷壯大,在機器學習和深度學習領域除了有官方支持的ML.NET外, 還有Miguel大神的TensorFlowSharp ,更可喜的是有一個基于.NET Core的機器學習和深度學習的技術開源社區(qū)SciSharp(https://github.com/SciSharp)。SciSharp 有不少和 Python 機器學習/深度學習的融入的項目,方便.NET Core的程序員無縫融入到機器學習/深度學習的環(huán)境中去,更重要一點是你可以繼續(xù)用你的C#。如果你是一個.NETer,估計也會喜歡上這個開源的項目。畢竟從Jupyter Notebook的支持,到機器學習相關的Numpy.NET / NumpySharp, Pandas.NET , SciSharp , scikit-learn , 到深度學習的Tensorflow.NET , KerasuNET , Torch.NET ,還有自然語言的BotSharp , SpaCy.NET 都做了.NET Core的移植。一個技術生態(tài)好與壞,就看你的開源項目質(zhì)量了。這是一個不錯的開端。
? ? ? ?傳統(tǒng)的機器學習/深度學習的工作方式,和我們寫代碼不一樣,基于Jupyter Notebook ,通過ICSharpCore(https://github.com/SciSharp/ICSharpCore)你可以為Jupyter Notebook 添加C#的支持。如果你是傳統(tǒng)程序員,你會喜歡IDE ,但在機器學習/深度學習的環(huán)境你更應該在Jupyter Notebook上開發(fā)。你可以通過Docker去部署這個環(huán)境(https://github.com/SciSharp/SciSharpCube之前社區(qū)好友分享過文章),但考慮到更高性能個人推薦還是在本機運行。我來補充下在本機的一些配置方法,你還是得安裝Python, 建議還是裝3.6.x / 3.7 , 還有別忘記通過pip去安裝jupyter(pip3 install jupyter),。畢竟這個解決方案還是得要一個標準的Python做支持。接下來就是一些很.NET Core的事情了
去下載一份ICSharpCore(https://github.com/SciSharp/ICSharpCore)的源碼在本地編譯,會生成dll,這里得提提如果你希望你的ICSharpCore環(huán)境支持ML.NET 你需要在改項目下通過dotnet add package添加ML.NET的支持
去kernel-spec目錄下修改kernel.json , 指定好剛才編譯生成的ICSharpCore.dll的路徑
回到ICSharpCore目錄下執(zhí)行 jupyter kernelspec install kernel-spec --name=csharpcore ?通過運行語句jupyter kernelspec list 檢查是否成功添加
? ? ? ?我們通過啟動jupyter notebook來測試下環(huán)境,通過New 可以看到選項已經(jīng)添加C#的支持(SciSharpCube這個名字不錯,所以我省得再修改了,當然你覺得不夠爽就自己通過修改kernel.json去修改),選中SciSharpCube就可以在Jupyter Notebook使用C#代碼
? ? ? ?
? ? ? ?因為ICSharpCore結合Roslyn編譯器進行使用,所以你引用庫時,也需要通過#r 進行使用,看兩個基于ML.NET的notebook,是不是很cool呢?
? ? ? ?回頭談一些細節(jié),現(xiàn)在SciSharp對于不同框架的綁定,無非兩種,第一種像TensorFlow.NET是基于TensorFlow原生的C庫做綁定,這種做法的優(yōu)點是對Python的依賴少,更像原生實現(xiàn),第二種就直接基于pythonnet(https://github.com/pythonnet/pythonnet)這個擴展去實現(xiàn),這種做法就是橋接只需要做一些簡單的語言擴展就可以快速實現(xiàn)功能,但有一個問題就是對本機Python環(huán)境依賴極高需要為不同版本的Python版本設置不同的dll,還有就是不夠原汁原味了。但這兩種方法其實對環(huán)境變量的設置都有要求,如TensorFlow.NET原生?就別忘記去設置TF的C庫放置的環(huán)境變量路徑,還有如依賴于pythonnet的Keras.NET, Numpy.NET就別忘記指定好你本機Python版本的lib文件夾路徑,否則就會出現(xiàn)很多問題。我可是花了不少時間的。
? ? ? ? SciSharp在medium上有不少介紹和示例(https://medium.com/scisharp),建議大家都去看看,當然我也會中英文同步發(fā)一些原創(chuàng)文章給大家,也建議更多人在社區(qū)貢獻代碼和示例讓它成為更優(yōu)秀的.NET開源項目。
原文鏈接:
https://blog.csdn.net/kinfey/article/details/96095690
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 撸过一万行代码,你看过这篇文章吗?
- 下一篇: CLR与JVM