當我們沒有大量不同的訓練數據時,我們該怎么辦?這是在TensorFlow中使用數據增強在模型訓練期間執行內存中圖像轉換以幫助克服此數據障礙的快速介紹。
圖像分類的成功至少在很大程度上受到大量可用訓練數據的驅動。暫時不考慮過擬合之類的問題,訓練的圖像數據越多,建立有效模型的機會就越大。
但是,如果我們沒有大量的培訓數據,我們該怎么辦?立即想到一些針對此特定問題的廣泛方法,尤其是遷移學習和數據增強功能。
遷移學習是將現有機器學習模型應用于最初并非預期的場景的過程。這種利用可以節省訓練時間并擴展現有機器學習模型的實用性,這些模型可能具有可用的數據和計算,并且已經在非常大的數據集上進行了很長時間的訓練。如果我們在大量數據上訓練模型,則可以優化結果以對少量數據有效。
數據擴充是現有訓練數據集的大小和多樣性的增加,而無需手動收集任何新數據。通過對現有數據執行一系列預處理轉換,可以獲取此增強數據,對于圖像數據,這些轉換可以包括水平和垂直翻轉,傾斜,修剪,旋轉等??偠灾?,與僅復制相同的數據相反,這種擴充的數據能夠模擬各種細微不同的數據點。這些“附加”圖像的細微差別應該足以幫助訓練更魯棒的模型。同樣,這就是想法。
本文的重點是在TensorFlow中第二種方法的實際實施,以減輕少量圖像訓練數據(數據增強)的問題,而稍后將對轉移學習進行類似的實際處理。
圖像增強如何幫助
當卷積神經網絡學習圖像特征時,我們希望確保這些特征以各種方向出現,以便使經過訓練的模型能夠識別出人的雙腿可以同時出現在圖像的垂直和水平方向。除了增加數據點的原始數量之外,增強功能在這種情況下還可以通過采用諸如圖像旋轉的變換來幫助我們。作為另一個示例,我們還可以使用水平翻轉來幫助模型訓練識別貓是直立的貓還是被倒置拍照的貓。
數據增強不是萬能藥;我們不希望它能解決我們所有的小數據問題,但是它可以在許多情況下有效,并且可以通過將其作為一種全面的模型訓練方法的一部分,或者與另一種數據集擴展技術(例如,轉移學習)
TensorFlow中的圖像增強
在TensorFlow中,使用ImageDataGenerator類完成數據擴充。它非常易于理解和使用。整個數據集在每個時期循環,并且數據集中的圖像根據選擇的選項和值進行轉換。這些轉換是在內存中執行的,因此不需要其他存儲(盡管save_to_dir如果需要,該參數可用于將增強的圖像保存到磁盤)。
如果您正在使用TensorFlow,則可能已經使用了ImageDataGenerator簡單的方法來縮放現有圖像,而沒有進行任何其他擴充??赡芸雌饋硐襁@樣:
ImageDataGenerator執行增強的更新可能如下所示:
這是什么意思呢?
**rotation/_range**-隨機旋轉的度數范圍;在上述示例中為20度
**width/_shift/_range**-總寬度的一部分(如果值<1,在這種情況下),以隨機地水平轉換圖像;上例中為0.2
**height/_shift/_range**-總高度的一部分(如果值<1,在這種情況下),以垂直方向隨機平移圖像;上例中為0.2
**shear/_range**-逆時針方向的剪切角,以度為單位,用于剪切轉換;上例中為0.2
**zoom/_range**-隨機縮放范圍;上例中為0.2
**horizontal/_flip**-用于水平隨機翻轉圖像的布爾值;在上面的例子中為真
**vertical/_flip**-布爾值,用于垂直隨機翻轉圖像;在上面的例子中為真
**fill/_mode**-根據“常數”,“最近”,“反射”或“環繞”填充輸入邊界之外的點;在以上示例中最接近
然后,您可以使用該ImageDataGeneratorflow_from_directory選項指定訓練數據的位置(以及選擇是否進行驗證,如果要創建驗證生成器),例如,使用選項,然后使用fit_generator在訓練過程中流向您網絡的這些增強圖像來訓練模型。此類代碼的示例如下所示:
審核編輯 黃昊宇
-
機器學習
+關注
關注
66文章
8436瀏覽量
132889 -
tensorflow
+關注
關注
13文章
329瀏覽量
60583
發布評論請先 登錄
相關推薦
評論