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

碼農譯站發表於2020-12-25

在本系列的最後,我們將介紹另一種方法,即利用一個預先訓練好的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,我們必須做三件事。首先,我們必須將輸入層的形狀更改為資料集中影像的維度。其次,我們至少需要更改輸出層,以便模型擁有與資料集相同數量的類。第三,我們必須調整模型,讓它知道我們對訓練預定義模型的層不感興趣。

完成這些步驟後,我們可以訓練或使我們的模型適合於給定的資料集。

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

我們還需要安裝Nuget包ML.NET。

為了訓練我們的模型來解決硬幣識別問題,我們將使用 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

 

相關文章