基于.NET下的人工智能系列专题|.NET下的人工智能系列专题|用Keras.NET 做一个图像识别的训练...
? ? .NET Core 的應(yīng)用場景越來越廣,開源社區(qū)也不斷壯大, .NET Core在機器學(xué)習(xí)領(lǐng)域不斷發(fā)展ML.NET外,也通過結(jié)合Tensorflow.NET去完善ML.NET在深度學(xué)習(xí)領(lǐng)域的功能,在ML.NET 1.3開始邁出了非常重要的一步。這不僅是微軟擁抱開源的策略,也是對SciSharp社區(qū)的認可。SciSharp社區(qū)不僅有Tensorlow.NET優(yōu)秀的產(chǎn)品,也有很多對基于Python機器學(xué)習(xí)/深度學(xué)習(xí)庫的封裝,這補充了現(xiàn)階段ML.NET在發(fā)展階段功能不全的缺陷,也讓更成熟的機器學(xué)習(xí)/深度學(xué)習(xí)方案應(yīng)用在.NET Core的生產(chǎn)環(huán)境中。今天我會介紹一下Keras.NET并通過Keras.NET做一個圖像識別的深度學(xué)習(xí)訓(xùn)練。
01
PART
什么是Keras?
? ? Keras是一個用Python編寫通過Tensorflow、PlaidML以及CNTK作為后端的高層神經(jīng)網(wǎng)絡(luò)API。Keras讓你用最簡單的方式快速完成深度學(xué)習(xí)(https://keras-cn.readthedocs.io/en/latest/) 。不少人喜歡用Keras進行模型訓(xùn)練。ScipySharp社區(qū)也對 Keras通過pythonnet進行了封裝(https://github.com/SciSharp/Keras.NET) 。
02
PART
如何用Keras.NET
? ? ??pythonnet是一個運行基礎(chǔ),它作為一個Python和.NET Core的橋接存在, ScipySharp社區(qū)對pythonnet進行了封裝和修改。由于開發(fā)環(huán)境各異,對于pythonnet的引用都略有不同,Windows下使用Python.Runtime.NETStandard / Linux下使用Python.Runtime.Mono / macOS下使用 Python.Runtime.OSX 。補充一點記得設(shè)置好Python的環(huán)境變量,否則你調(diào)用就會出現(xiàn)一堆問題。對于Keras.NET的封裝,也依賴于Numpy.NET
(https://github.com/SciSharp/Numpy.NET)。這里有個比較特別的地方,需要下載源碼,把Keras.NET/Numpy.NET基于不同平臺對應(yīng)的Python.Runtime版本的包添加重新設(shè)置編譯,并在本地通過dll直接引用。還有Numpy.NET有兩個版本,一個是支持Windows的Numpy , 一個是支持Linux/macOS的Numpy.Bare 使用時候不要搞混了。
03
PART
一個經(jīng)典的例子
? ? ?這里做一個貓狗分類的圖像分類的示例,這個示例比較經(jīng)典,也算是一個Keras上的HelloWorld .讓我們來看看如何通過Keras.NET來完成。
01
環(huán)境
環(huán)境,我還是依賴于 JupyterNotebook (如何用JupyterNotebook 支持C#環(huán)境, 可以看我之前的文章
(https://blog.csdn.net/kinfey/article/details/96095690),這里提醒需要把Keras.NET, Numpy.NET添加到ICSharpCore項目當中,否則沒法使用Keras.NET.
02
創(chuàng)建JupyterNotebook
創(chuàng)建JupyterNotebook , 把項目必要的庫進行引用.注意因為我是Linux環(huán)境,在Linux環(huán)境下是Python 3.6.8,所以我這里對應(yīng)的是Python.Runtime.Mono 3.6.0(如果你是其他平臺其他版本記得要切換好,否則是不能使用的), 還有通過Rosyln把本地編譯好的Keras.dll,Numpy.Bare.dll引入。
03
CNN算法定義
CNN算法定義,這個就是佛系了,畢竟這是深度學(xué)習(xí)的一部分,。CNN, 全名卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN), 是一種前饋神經(jīng)網(wǎng)絡(luò),人工神經(jīng)元可以相應(yīng)周圍單元,可以進行大型圖像處理。
(http://cs231n.github.io/convolutional-networks/)。CNN網(wǎng)絡(luò)層級由輸入層,卷積層,激活層,池化層,全連接FC層共5個部分組成,通過Keras可以很容易完成這5個部分的層級操作。具體看以下代碼。
04
數(shù)據(jù)整理
數(shù)據(jù)整理,數(shù)據(jù)分為訓(xùn)練數(shù)據(jù),和測試數(shù)據(jù),Keras有對圖像分類支持的接口ImageDataGenerator。
05
訓(xùn)練和保存模型
訓(xùn)練和保存模型,通過FitGenerator對圖像數(shù)據(jù)進行訓(xùn)練,這里你可以根據(jù)實際情況調(diào)整訓(xùn)練參數(shù),訓(xùn)練完后可以保存以h5為后續(xù)的模型。注意,訓(xùn)練需要時間,如果你有GPU是最好的,否則CPU會花不少時間。
這里要提醒一點,因為ICSharpCore還在改進,訓(xùn)練時產(chǎn)生的狀態(tài)只能通過去命令行中查閱,所以要看訓(xùn)練效果可以通過命令行看。
06
測試模型
最后展示一個完整的Jupyter Notebook
轉(zhuǎn)型到機器學(xué)習(xí)/深度學(xué)習(xí)對不少人來說都需要花很多的時間,但在自己熟悉的環(huán)境下學(xué)習(xí)是提升學(xué)習(xí)效率的方法。希望SciSharp社區(qū)能幫到.NETer。? ? ? ? ??
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的基于.NET下的人工智能系列专题|.NET下的人工智能系列专题|用Keras.NET 做一个图像识别的训练...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【朝夕技术专刊】WebApi部署多服务器
- 下一篇: 一个迷你ASP.NET Core框架的实