本教程指導(dǎo)您如何利用Keras進(jìn)行多輸入與混合數(shù)據(jù)的處理。我們將學(xué)習(xí)如何構(gòu)建能夠接收多種輸入(包括數(shù)字、分類(lèi)和圖像數(shù)據(jù))的Keras架構(gòu)。接下來(lái),我們將在混合數(shù)據(jù)上訓(xùn)練一個(gè)端到端網(wǎng)絡(luò)。這是關(guān)于Keras與回歸預(yù)測(cè)的三部系列教程的最終部分。
通過(guò)本教程,您將掌握以下技能:
回顧混合數(shù)據(jù)的概念以及Keras如何接收多個(gè)輸入。審查房?jī)r(jià)數(shù)據(jù)集及其目錄結(jié)構(gòu)。學(xué)習(xí)如何準(zhǔn)備數(shù)據(jù),定義并訓(xùn)練多輸入Keras模型,該模型在單個(gè)端到端網(wǎng)絡(luò)中接受多種類(lèi)型輸入數(shù)據(jù)。在測(cè)試集上評(píng)估多輸入與混合數(shù)據(jù)模型,并與之前文章的結(jié)果進(jìn)行比較。了解如何利用Keras處理多輸入與混合數(shù)據(jù),敬請(qǐng)閱讀!
混合數(shù)據(jù)概覽借助Keras靈活的深度學(xué)習(xí)框架,可以定義一個(gè)多輸入模型,該模型包含CNN和MLP分支,以處理混合數(shù)據(jù)。
在機(jī)器學(xué)習(xí)中,混合數(shù)據(jù)指包含多種類(lèi)型數(shù)據(jù)的概念。例如,在醫(yī)院工作的機(jī)器學(xué)習(xí)工程師為開(kāi)發(fā)能夠?qū)颊呓】禒顩r進(jìn)行分類(lèi)的系統(tǒng),將面臨多種類(lèi)型的數(shù)據(jù)輸入,如:
病歷記錄醫(yī)學(xué)影像實(shí)驗(yàn)室檢查結(jié)果生理參數(shù)所有這些值構(gòu)成了不同的數(shù)據(jù)類(lèi)型;我們的機(jī)器學(xué)習(xí)模型必須能夠接收這種“混合數(shù)據(jù)”并進(jìn)行預(yù)測(cè)。
處理混合數(shù)據(jù)是機(jī)器學(xué)習(xí)研究中的一個(gè)開(kāi)放領(lǐng)域,通常嚴(yán)重依賴(lài)于特定任務(wù)/最終目標(biāo)。在本教程中,我們將處理混合數(shù)據(jù)以幫助您了解相關(guān)挑戰(zhàn)。
Keras接收多個(gè)輸入的方法不同于Sequential API,Keras的函數(shù)式API允許構(gòu)建更復(fù)雜的模型,包括多輸入模型。
例如,我們可以定義一個(gè)簡(jiǎn)單的序列神經(jīng)網(wǎng)絡(luò):
使用Keras的函數(shù)式API定義一個(gè)多輸入模型:一個(gè)簡(jiǎn)單的前饋神經(jīng)網(wǎng)絡(luò),有10個(gè)輸入,第一個(gè)隱藏層有8個(gè)節(jié)點(diǎn),第二個(gè)隱藏層有4個(gè)節(jié)點(diǎn),最后一個(gè)輸出層用于回歸。房?jī)r(jià)數(shù)據(jù)集分析數(shù)據(jù)集包含數(shù)字/分類(lèi)數(shù)據(jù)與圖像數(shù)據(jù)。圖像數(shù)據(jù)來(lái)自每棟房屋中的535個(gè)示例。數(shù)字和分類(lèi)屬性包括:
位置大小房間數(shù)量浴室數(shù)量每個(gè)房子總共提供了四張圖片:
浴室圖片臥室圖片正面視圖圖片廚房圖片今天,我們將使用Keras處理多個(gè)輸入與混合數(shù)據(jù),接受數(shù)字/分類(lèi)數(shù)據(jù)以及圖像數(shù)據(jù)到網(wǎng)絡(luò)。
項(xiàng)目結(jié)構(gòu)與腳本回顧Houses-dataset文件夾包含我們?cè)诒鞠盗兄惺褂玫腍ouse Prices數(shù)據(jù)集。運(yùn)行mix_training.py腳本時(shí),您僅需提供數(shù)據(jù)集路徑作為命令行參數(shù)(具體操作將在結(jié)果部分展示)。我們回顧三個(gè)Python腳本:
model/datasets.py:處理加載與預(yù)處理數(shù)字/分類(lèi)數(shù)據(jù)與圖像數(shù)據(jù)。model/models.py:包含多層感知器(MLP)與卷積神經(jīng)網(wǎng)絡(luò)(CNN),這些是多輸入混合數(shù)據(jù)模型的輸入分支。mix_training.py:訓(xùn)練腳本,使用pyimagesearch模塊的功能加載、拆分?jǐn)?shù)據(jù),并將兩個(gè)分支連接到網(wǎng)絡(luò),然后訓(xùn)練與評(píng)估模型。數(shù)據(jù)加載與預(yù)處理定義函數(shù)加載并預(yù)處理數(shù)字/分類(lèi)數(shù)據(jù)與圖像數(shù)據(jù)。結(jié)果是一個(gè)更準(zhǔn)確的模型,因?yàn)樗^(guò)濾了不平衡的記錄。
接下來(lái)定義一個(gè)輔助函數(shù)來(lái)加載輸入圖像。加載所有圖像,并創(chuàng)建表示每棟房屋的蒙太奇圖像。
模型定義構(gòu)建一個(gè)多輸入、混合數(shù)據(jù)網(wǎng)絡(luò),定義兩個(gè)分支:
一個(gè)簡(jiǎn)單的多層感知器(MLP)用于處理分類(lèi)/數(shù)字輸入。一個(gè)卷積神經(jīng)網(wǎng)絡(luò)(CNN)用于處理圖像數(shù)據(jù)。這兩個(gè)分支將合并以形成最終的多輸入Keras模型。
使用Keras進(jìn)行多輸入處理準(zhǔn)備構(gòu)建能夠處理多個(gè)輸入與混合數(shù)據(jù)的最終Keras模型。訓(xùn)練與評(píng)估也將在此腳本中進(jìn)行。
定義函數(shù)加載數(shù)值/分類(lèi)數(shù)據(jù)與圖像數(shù)據(jù),進(jìn)行切分、縮放與編碼。
定義兩個(gè)分支:MLP與CNN,分別處理數(shù)字/分類(lèi)數(shù)據(jù)與圖像數(shù)據(jù)。
將分支合并為多輸入Keras網(wǎng)絡(luò)模型,然后訓(xùn)練與評(píng)估模型。
結(jié)果與總結(jié)在混合數(shù)據(jù)上訓(xùn)練多輸入網(wǎng)絡(luò)后,我們獲得以下結(jié)果:
平均絕對(duì)百分比誤差從高值開(kāi)始,隨著訓(xùn)練過(guò)程繼續(xù)下降。在測(cè)試集上獲得27.52%的平均絕對(duì)百分比誤差,意味著網(wǎng)絡(luò)在房?jī)r(jià)預(yù)測(cè)中平均降低約26-27%。本教程教會(huì)您如何定義接受多個(gè)輸入的Keras網(wǎng)絡(luò),以及如何使用Keras處理混合數(shù)據(jù)。我們定義了一個(gè)多輸入神經(jīng)網(wǎng)絡(luò),將數(shù)值數(shù)據(jù)與圖像數(shù)據(jù)組合,并在單個(gè)端到端網(wǎng)絡(luò)中訓(xùn)練。
通過(guò)這種方式,我們能夠端到端地訓(xùn)練多輸入網(wǎng)絡(luò),其準(zhǔn)確度接近單個(gè)輸入時(shí)的水平。代碼復(fù)現(xiàn)已提供。