C 中的深度學習(二) 預處理識別硬幣的資料集

2021-10-12 15:18:51 字數 3102 閱讀 6190

在文章中,我們將對輸入到機器學習模型中的資料集進行預處理。

這裡我們將對乙個硬幣資料集進行預處理,以便以後在監督學習模型中進行訓練。在機器學習中預處理資料集通常涉及以下任務:

清理資料——通過對周圍資料的平均值或使用其他策略來填補資料缺失或損壞造成的漏洞。

規範資料——將資料縮放值標準化到乙個標準範圍,通常是0到1。具有廣泛值範圍的資料可能會導致不規範,因此我們將所有資料都放在乙個公共範圍內。

一種熱編碼標籤——將資料集中物件的標籤或類編碼為n維二進位制向量,其中n是類的總數。陣列元素都被設定為0,除了與物件的類相對應的元素,它被設定為1。這意味著在每個陣列中都有乙個值為1的元素。

將輸入資料集分為訓練集和驗證集——訓練集被用於訓練模型,驗證集是用於檢查我們的訓練結果。

這個例子我們將使用numpy.net,它基本上是python中流行的numpy庫的.net版本。

numpy是乙個專注於處理矩陣的庫。

為了實現我們的資料集處理器,我們在preprocessing資料夾中建立utils類和dataset類。utils類合併了乙個靜態normalize 方法,如下所示:

public class utils

}

在這種方法中,我們用給定的顏色模式(rgb或灰度)載入影象,並將其調整為給定的寬度和高度。然後我們返回包含影象的矩陣,每個元素除以255。每個元素除以255是使它們標準化,因為影象中任何畫素的值都在0到255之間,所以通過將它們除以255,我們確保了新的範圍是0到1,包括255。

我們還在**中使用了乙個settings類。該類包含用於跨應用程式使用的許多常量。另乙個類dataset,表示我們將要用來訓練機器學習模型的資料集。這裡我們有以下字段:

_pathtofolder—包含影象的資料夾的路徑。

_extlist—要考慮的副檔名列表。

_labels—_pathtofolder中影象的標籤或類。

_objs -影象本身,表示為numpy.ndarray。

_validationsplit—用於將總影象數劃分為驗證集和訓練集的百分比,在本例中,百分比將定義驗證集與總影象數之間的大小。

numberclasses-資料集中唯一類的總數。

trainx -訓練資料,表示為numpy.ndarray。

trainy -訓練標籤,表示為numpy.ndarray。

validationx—驗證資料,表示為numpy.ndarray。

validationy-驗證標籤,表示為numpy.ndarray。

這是dataset類:

public class dataset

public ndarray trainx

public ndarray validationx

public ndarray trainy

public ndarray validationy

public dataset(string pathtofolder, string extlist, int numberclasses, double validationsplit)

public void loaddataset()

private bool isrequiredextfile(string filename)

}return false;

}private void maptoclassrange()

private ndarray onehotencoding(listlabels)

private void processfile(string path)

private void processlabel(string filename)

private string extractclassfromfilename(string filename)

private void gettrainvalidationdata()

// split rest (training data)

listindices.foreach(indexval =>

);trainy = onehotencoding(ytrainresult);

validationy = onehotencoding(yvalresult);

trainx = np.array(xtrainresult);

validationx = np.array(xvalresult);}}

下面是每個方法的說明:

loaddataset()——類的主方法,我們呼叫它來載入_pathtofolder中的資料集。它呼叫下面列出的其他方法來完成此操作。

isrequiredextfile(filename) - 檢查給定檔案是否包含至少乙個應該為該資料集處理的副檔名(在_extlist中列出)。

maptoclassrange() -獲取資料集中唯一標籤的列表。

processfile(path) -使用utils.normalize方法對影象進行規格化,並呼叫processlabel方法。

processlabel(filename)——將extractclassfromfilename方法的結果新增為標籤。

extractclassfromfilename(filename) -從影象的檔名中提取類。

gettrainvalidationdata()——將資料集劃分為訓練子資料集和驗證子資料集。

在本系列中,我們將使用上的硬幣影象資料集。

要載入資料集,我們可以在控制台應用程式的主類中包含以下內容:

深度學習中的白化預處理

資料的白化是在資料歸一化之後進行的。在對資料進行白化前要求先對資料進行特徵零均值化,不過一般只要做了特徵標準化,那麼這個條件就滿足了。在資料白化過程中,最主要的還是引數epsilon的選擇,因為這個引數的選擇對deep learning的結果起著至關重要的作用。在基於重構的模型中 比如說常見的rbm...

C 中的預處理

預處理器指示符用 標識,例如 include。處理這些指示符的程式被稱為 預處理器 通常預處理器是 在編譯器中的。include include file2.h 用尖括號 括起來來的,表明這個標頭檔案是乙個標準標頭檔案,查詢的時候會從預定義的目錄開始,我們可以通過設定路徑環境變數或命令列選項來修改這...

C 中的預處理

一 預處理的由來 在c 的歷史發展中,有很多的語言特徵 特別是語言的晦澀之處 來自於c語言,預處理就是其中的乙個。c 從c語言那裡把c語言預處理器繼承過來 c語言預處理器,被bjarne博士簡稱為cpp,不知道是不是c program preprocessor的簡稱 二 常見的預處理功能 預處理器的...