簡單數(shù)據(jù)預(yù)處理、數(shù)據(jù)準備
思路與代碼:
????????如果要進行機器學習或深度學習模型建模時,肯定是要有訓練數(shù)據(jù),但是這是數(shù)據(jù)往往不是直接就可以傳給模型去訓練的,需要經(jīng)過批處理,讓數(shù)據(jù)變成能讓模型接受的參數(shù)。那模型都接受什么參數(shù)???就拿CNN來說,通常是三維的彩色圖像,(即 寬 高 通道數(shù))本章以三維圖像輸入為例。
????????首先,數(shù)據(jù)是從百度爬取的圖片,5種水果每類水果為200多張,還算比較均勻

開始先創(chuàng)建一個各類型所對應(yīng)llabel的字典,相當于做一個標簽編碼的字典,后面需要映射到txt文件中,為啥要映射到txt文件???因為最后肯定是從一個容器中讀取圖像的數(shù)據(jù)和它對應(yīng)的標簽傳給神經(jīng)網(wǎng)絡(luò)啊。
創(chuàng)建完接著定義數(shù)據(jù)集根目錄,一會兒讀取文件什么的需要用到
然后定義在水果類型同級目錄下的一兩個train.txt、test.txt路徑,因為一會兒要創(chuàng)建這兩個文件。創(chuàng)建干嘛?用來存圖片的路徑和圖片的標簽啊
接著創(chuàng)建一個空字典,準備鍵為類別,值為圖像的路徑列表(這一類每一個圖像的路徑)
獲取數(shù)據(jù)集根目錄下的所有文件夾名字 給一個列表

? 6.遍歷dirs中的內(nèi)容,想獲取水果各類型的文件夾名,用來做相關(guān)操作:
先把取出來的文件名(文件夾名)和根目錄拼接成一個路徑
判斷這個文件是不是文件夾,因為只有存放圖片數(shù)據(jù)的容器是文件夾。如果是文件夾
那么獲取這個文件夾下的所有圖像文件的文件名,用來做路徑拼接。
拼接完路徑后,傳給一個函數(shù)來把這些數(shù)據(jù)添加到空字典中

這個函數(shù)要實現(xiàn)的功能:把類型作為鍵,所對應(yīng)的所有圖像路徑(列表)作為值
到時候需要從里面讀取寫到txt中,為什么有字典還要寫入txt文件后面讀txt文件呢?方便劃分訓練集測試集、方便使用唄,如果只用字典還比較麻煩,當然也不是不行。
這里首先判斷這個類型在不在這個字典里,如果不在,則創(chuàng)建一個空列表,空列表里添加傳進來的路徑,字典【鍵】=img_path_list來添加鍵值對。
如果字典中已經(jīng)有這個類型了(說明肯定也有相應(yīng)的list了),就直接添加到字典中就行了

7.創(chuàng)建兩個空txt,用來存儲每一個圖像文件的路徑和它對應(yīng)的標簽

因為現(xiàn)在還用不上,所以pass掉,只創(chuàng)建一個空文件
8.然后遍歷字典,劃分訓練集和測試集到txt文件中
遍歷字典,拿到類型名字和存有圖像路徑的列表,創(chuàng)建一個變量i,一會兒用來劃分訓練集測試集用。
遍歷圖像路徑列表,,用來求余10看看是不是等于0,如果等于0則劃分到測試集。打開剛才創(chuàng)建的空txt文件,格式以 【路徑? ?類型】這樣的格式存數(shù),路勁和類型中有一個'\t'符號,當然可以用空格代替。
一定不要忘了 i +=1

###########################數(shù)據(jù)準備###################################
數(shù)據(jù)預(yù)處理完成后構(gòu)建訓練集和測試集的讀取器,訓練集的讀取器要求是快速隨機批量,測試集只要求快速批量。
1.構(gòu)建訓練集讀取器,用閉包寫一個生成器,每一次拿數(shù)據(jù)就彈出一批次,這里用了一個paddle的中間處理函數(shù),就是說,閉包先不返回里面的yield,因為神經(jīng)網(wǎng)絡(luò)要的不是你圖像的李靜吧?所以另寫一個函數(shù):實現(xiàn)圖像讀取,圖像縮放、歸一化,? ? 經(jīng)過中間函數(shù)處理后然后再返回


2.測試集也是同樣的套路,只是名字變換了一下而已,到這里,數(shù)據(jù)預(yù)處理與數(shù)據(jù)準備就完成了
