當咱們沒有大量不一樣的訓練數據時,咱們該怎麼辦?這是在TensorFlow中使用數據加強在模型訓練期間執行內存中圖像轉換以幫助克服此數據障礙的快速介紹。python
圖像分類的成功至少在很大程度上受到大量可用訓練數據的驅動。暫時不考慮過擬合之類的問題,訓練的圖像數據越多,創建有效模型的機會就越大。api
可是,若是咱們沒有大量的培訓數據,咱們該怎麼辦?當即想到一些針對此特定問題的普遍方法,尤爲是遷移學習和數據加強功能。微信
遷移學習是將現有機器學習模型應用於最初並不是預期的場景的過程。這種利用能夠節省訓練時間並擴展示有機器學習模型的實用性,這些模型可能具備可用的數據和計算,而且已經在很是大的數據集上進行了很長時間的訓練。若是咱們在大量數據上訓練模型,則能夠優化結果以對少許數據有效。網絡
數據擴充是現有訓練數據集的大小和多樣性的增長,而無需手動收集任何新數據。經過對現有數據執行一系列預處理轉換,能夠獲取此加強數據,對於圖像數據,這些轉換能夠包括水平和垂直翻轉,傾斜,修剪,旋轉等。總而言之,與僅複製相同的數據相反,這種擴充的數據可以模擬各類細微不一樣的數據點。這些「附加」圖像的細微差異應該足以幫助訓練更魯棒的模型。一樣,這就是想法。機器學習
本文的重點是在TensorFlow中第二種方法的實際實施,以減輕少許圖像訓練數據(數據加強)的問題,而稍後將對轉移學習進行相似的實際處理。學習
當卷積神經網絡學習圖像特徵時,咱們但願確保這些特徵以各類方向出現,以便使通過訓練的模型可以識別出人的雙腿能夠同時出如今圖像的垂直和水平方向。除了增長數據點的原始數量以外,加強功能在這種狀況下還能夠經過採用諸如圖像旋轉的變換來幫助咱們。做爲另外一個示例,咱們還可使用水平翻轉來幫助模型訓練識別貓是直立的貓仍是被倒置拍照的貓。優化
數據加強不是萬能藥;咱們不但願它能解決咱們全部的小數據問題,可是它能夠在許多狀況下有效,而且能夠經過將其做爲一種全面的模型訓練方法的一部分,或者與另外一種數據集擴展技術(例如,轉移學習)spa
在TensorFlow中,使用ImageDataGenerator類完成數據擴充。它很是易於理解和使用。整個數據集在每一個時期循環,而且數據集中的圖像根據選擇的選項和值進行轉換。這些轉換是在內存中執行的,所以不須要其餘存儲(儘管save_to_dir
若是須要,該參數可用於將加強的圖像保存到磁盤)。code
若是您正在使用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**
-根據「常數」,「最近」,「反射」或「環繞」填充輸入邊界以外的點;在以上示例中最接近而後,您可使用該ImageDataGenerator
flow_from_directory
選項指定訓練數據的位置(以及選擇是否進行驗證,若是要建立驗證生成器),例如,使用選項,而後使用fit_generator
在訓練過程當中流向您網絡的這些加強圖像來訓練模型。此類代碼的示例以下所示:
看完別走還有驚喜!
我精心整理了計算機/Python/機器學習/深度學習相關的2TB視頻課與書籍,價值1W元。關注微信公衆號「計算機與AI」,點擊下方菜單便可獲取網盤連接。