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

OPA132進(jìn)行數(shù)據(jù)采集,采集到的一直都是fff,為什么?
使用CAN總線進(jìn)行數(shù)據(jù)采集的方法
如何使用ddc進(jìn)行數(shù)據(jù)分類
如何使用cmp進(jìn)行數(shù)據(jù)庫管理的技巧
使用FPGA控制AFE5816進(jìn)行數(shù)據(jù)采集遇到的疑問求解
使用ADS1119進(jìn)行數(shù)據(jù)轉(zhuǎn)換時(shí),選擇差分輸入時(shí),會顯示轉(zhuǎn)換數(shù)據(jù),為什么?
如何使用SQL進(jìn)行數(shù)據(jù)分析
為什么選擇eda進(jìn)行數(shù)據(jù)分析
ADS1299與STM32f407通過SPI進(jìn)行數(shù)據(jù)傳輸?shù)臅r(shí)候,可以直接使用HAL庫中的HAL_SPI_Receive函數(shù)進(jìn)行數(shù)據(jù)傳輸嗎?
使用TMS320C6000 MCBSP進(jìn)行數(shù)據(jù)打包

評論