C#中的深度學習(五):在ML.NET中使用預訓練模型進行硬幣識別

在本系列的最後,咱們將介紹另外一種方法,即利用一個預先訓練好的CNN來解決咱們一直在研究的硬幣識別問題。網絡

在這裏,咱們看一下轉移學習,調整預約義的CNN,並使用Model Builder訓練咱們的硬幣識別模型。架構

咱們將使用ML.NET代替Keras.NET。爲何不使用Keras.NET呢?儘管Keras.NET很是簡單,易於學習,雖然它包含前面提到的預約義模型,但它的簡單性使咱們沒法自定義CNN架構來適應咱們的問題。框架

ML.NET是一個微軟的免費機器學習框架,旨在使用C#和F#進行開發。最重要的是,咱們能夠將ML.NET與Azure結合使用,這意味着咱們可使用基於雲的基礎設施來訓練咱們的模型。讓多個虛擬機以分佈式方式運行咱們的代碼可使訓練更快、更準確。機器學習

爲何預訓練的CNN如此有價值?由於有人花了不少時間和資源培訓他們,咱們能夠利用這一點。咱們能夠重用嵌入在爲網絡計算的權值,咱們能夠將它們從新應用到相似的問題中。也就是說,它們不只能夠應用於CNN最初訓練解決的問題。這種方法就被稱爲遷移學習。它能夠爲咱們節省大量的培訓時間,並大大提升所得到的結果。分佈式

在遷移學習中,咱們不像之前那樣從零開始。相反,咱們從一個已知的模型開始,該模型具備預約義的體系結構和在第一次請求模型時下載的計算權重。流行的模型包括Inception、ResNet和VGG16等。工具

要針對咱們的問題調整預約義的CNN,咱們必須作三件事。首先,咱們必須將輸入層的形狀更改成數據集中圖像的維度。其次,咱們至少須要更改輸出層,以便模型擁有與數據集相同數量的類。第三,咱們必須調整模型,讓它知道咱們對訓練預約義模型的層不感興趣。學習

完成這些步驟後,咱們能夠訓練或使咱們的模型適合於給定的數據集。ui

讓咱們開始吧。在Visual Studio中,轉到Extensions > Manage Extensions,瀏覽ML.NET Model Builder3d

咱們還須要安裝Nuget包ML.NET。code

爲了訓練咱們的模型來解決硬幣識別問題,咱們將使用 Model Builder 擴展。

使用這個工具,咱們能夠輕鬆地設置數據集並訓練模型,它經過 Model Builder中添加的Auto ML特性自動選擇模型。自動機器學習(automatic Machine Learning, Auto ML)是一種自動化機器學習模型開發中的耗時任務。因此Model Builder將爲咱們簡化準備數據集的過程,以及選擇預先訓練好的模型和全部涉及的參數。關於所選的預訓練模型,有一點是隻有最後一層會被從新訓練;其餘全部人都保持權重。

對於數據集的狀況,惟一的要求是將其組織在文件夾中,這樣文件夾名就是其中全部圖像的類或標籤。

當咱們到目前爲止使用的硬幣數據集被輸入到模型構建器中時,AutoML引擎選擇ResNet做爲預先訓練好的架構來用於咱們的問題。

一旦訓練結束,咱們就能夠預測新的輸入數據,甚至能夠獲得與爲預測而生成的模型相對應的代碼。只需這麼少的工做,咱們就能夠在幾乎沒有任何相關知識的狀況下使用ML,經過UI簡單地完成全部工做,選擇、單擊並在最後得到代碼。

關於使用C#進行硬幣識別的系列文章到此結束。但願你喜歡!若是有任何問題,不要忘記留言或發信息。感謝你的閱讀。

歡迎關注個人公衆號,若是你有喜歡的外文技術文章,能夠經過公衆號留言推薦給我。

 

原文連接:https://www.codeproject.com/Articles/5284231/Deep-Learning-in-Csharp-Coin-Recognition-with-a-Pr

相關文章
相關標籤/搜索