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