
歡迎關注?“小白玩轉Python”,發現更多 “有趣”
在使用神經網絡和深度學習模型時,需要進行數據準備。對于更復雜的物體識別任務,也越來越需要增加數據量。
數據增加意味著增加數據量。換句話說,擁有更大的數據集意味著更健壯的模型。但是獲取更多的數據并不總是那么容易,而且可能存在存儲數據并將其提供給模型的問題。
為了緩解這個問題,我們可以通過做一些修改手動增加數據,或者我們可以使用一個 Keras 圖像預處理類,只需幾行代碼就可以做到這一點。
在這篇文章中,我們將看到在使用 Keras 開發和評估 Python 中的深度學習模型時,如何使用圖像數據集進行數據準備和數據增強。
讀完這篇文章,你就會知道:
1. 關于Keras提供的圖像增強API以及如何在模型中使用它。如何執行特征標準化;
2. 如何對圖像執行 ZCA 白化;
3. 如何對圖像數據隨機旋轉,移位和翻轉增強;
4. 如何將增強圖像數據保存到磁盤。
圖像增強 API:ImageDataGenerator
它從原始批處理中生成批處理的增強數據。該算法首先對圖像進行隨機變換,然后生成一批新的圖像進行訓練。
注意: 這里需要注意的一點是 ImageDataGenerator 不返回原始圖像,而只返回一批增強數據,這是對原始數據進行某些轉換的結果。
加載數據集
我們將使用 MNIST 手寫數字識別進行數據增強。執行下面的代碼將從 keras.datasets 加載 MNIST 數據集:
將數據分解成訓練街和測試集
像素標準化
像素標準化在兩個級別上得到支持:每個圖像(稱為樣本級)或每個數據集(稱為特征級)。具體來說,標準化像素值所需的平均值和/或平均值和標準差統計量可以僅從每張圖像中的像素值計算(按樣本計算) ,也可以從整個訓練數據集中計算(按特征計算)。
您可以通過在 ImageDataGenerator 類上設置 featurewise_center 和 featurewise_std_normalization 參數來執行標準化過程。
運行這個例子,您可以看到效果是不同的,似乎暗淡和亮化不同的數字。
ZCA 白化
圖像的白化變換是一個線性代數運算,它減少了像素圖像矩陣中的冗余。通常,圖像增白是使用主成分分析分析技術進行的。最近,一種叫做 ZCA 的方法顯示了更好的結果,在變換后的圖像中保留了所有的原始維度,不像 PCA,結果變換后的圖像仍然看起來像原始圖像。
隨機旋轉
您可以訓練您的模型,以更好地在訓練期間人為處理數據集中圖像旋轉和隨機旋轉。下面的示例通過設置 rotation _ range 參數創建 MNIST 數字最高90度的隨機旋轉。
你可以看到圖像被左右旋轉到90度的極限。這對這個問題沒有幫助,因為 MNIST 的數字有一個規范化的方向,但是這種轉換可能有助于從物體可能有不同方向的照片中學習。
隨機平移
圖像中的對象可能不在框架中心。它們可能在各種不同的方面偏離中心。您可以通過人工創建訓練數據的平移版本來訓練深度學習網絡。Keras 支持通過 width_shift_range 和 height_shift_range 參數對訓練數據進行水平和垂直隨機平移。
同樣,由于手寫數字已經居中,這對于 MNIST 來說是不必要的,但是您可以看到這在更復雜的問題域中是多么有用。
隨機翻轉
另一個增強圖像數據的方法是在訓練數據中創建隨機的圖像翻轉,這樣可以提高處理大型復雜問題的性能。Keras 支持使用 vertical_flip 和 horizontal_flip 參數沿垂直軸和水平軸進行隨機翻轉。
翻轉數字不是很有用,因為它們總是有正確的左右方向,但是對于場景中可能有不同方向的物體的照片來說,這可能是有用的。
·? END? ·
HAPPY?LIFE