這篇文章將為大家詳細(xì)講解有關(guān)如何使用Mobilenet和Keras進(jìn)行遷移學(xué)習(xí),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
成都創(chuàng)新互聯(lián)公司主營長垣網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),長垣h5成都微信小程序搭建,長垣網(wǎng)站營銷推廣歡迎長垣等地區(qū)企業(yè)咨詢我將向您展示使用Mobilenet對(duì)狗的圖像進(jìn)行分類的示例。然后,我將向您展示一個(gè)例子,它會(huì)把藍(lán)山雀的圖像錯(cuò)誤分類。然后,我將重新訓(xùn)練Mobilenet并使用遷移學(xué)習(xí),以便它可以正確地對(duì)相同的輸入圖像進(jìn)行分類。在這個(gè)過程中,僅使用了兩個(gè)分類器,但是這可以擴(kuò)展到您想要的數(shù)量,僅限于您可用的硬件數(shù)量和時(shí)間。
Mobilenet的源文件位于:https://arxiv.org/pdf/1704.04861.pdf
MobileNets:用于移動(dòng)視覺應(yīng)用的高效卷積神經(jīng)網(wǎng)絡(luò)。
我們使用Mobilenet,是因?yàn)樗募軜?gòu)很輕巧。它使用深度可分離的卷積,這基本上意味著它在每個(gè)顏色通道上都執(zhí)行單個(gè)卷積,而不是將所有三個(gè)卷積相合并展平它。這具有過濾輸入通道的效果?;蛘哒绫疚淖髡咔宄亟忉尩哪菢樱骸皩?duì)于MobileNets,深度卷積對(duì)每個(gè)輸入通道應(yīng)用單個(gè)濾波器。然后,逐點(diǎn)卷積應(yīng)用1×1卷積來組合輸出深度卷積。標(biāo)準(zhǔn)卷積既可以在一個(gè)步驟中過濾并將輸入組合成一組新的輸出。深度可分離卷積將其分成兩層,一個(gè)用于過濾的單獨(dú)層一個(gè)用于組合的單獨(dú)層。這種因式分解具有顯著減少計(jì)算和模型大小的效果?!?/p>
逐點(diǎn)和深度卷積之間的差異
所以Mobilenet的整體架構(gòu)如下,有30層
步長為2的卷積層
depthwise layer
pointwise layer,使通道數(shù)加倍
步長為2的depthwise layer
pointwise layer,使通道數(shù)加倍
等等
Mobilenet完整架構(gòu)
它的維護(hù)成本非常低,在高速下表現(xiàn)也非常好。還有許多類型的預(yù)訓(xùn)練模型,其存儲(chǔ)器中的網(wǎng)絡(luò)大小和磁盤上使用的參數(shù)數(shù)量成比例。網(wǎng)絡(luò)的速度和功耗與MACs (Multiply-Accumulates)的數(shù)量成正比,后者是融合乘法和加法運(yùn)算數(shù)量的度量。
現(xiàn)在讓我們來看看代碼!
我的全部代碼:https://github.com/ferhat00/Deep-Learning/tree/master/Transfer%20Learning%20CNN
讓我們加載必要的包和庫。
我們從Keras輸入預(yù)先訓(xùn)練的模型。
讓我們嘗試下對(duì)不同品種的狗的圖像進(jìn)行一些測試。
輸出:
輸出:
輸出:
到現(xiàn)在為止還挺好。它很好地分類了每一種狗,那么接下來讓我們?cè)囈环N鳥類藍(lán)色的山雀來看看。
藍(lán)雀
輸出:
你可以看到它無法識(shí)別藍(lán)山雀。它錯(cuò)誤地將圖像歸類為小雞。這是一種原產(chǎn)于北美的本土鳥類,并且有微妙的不同:
山雀
現(xiàn)在讓我們操縱Mobilenet架構(gòu),重新訓(xùn)練前幾個(gè)層并使用遷移學(xué)習(xí)。要做到這一點(diǎn),我們需要用一些圖像訓(xùn)練它。在這里,我將用藍(lán)山雀和烏鴉的圖像進(jìn)行訓(xùn)練。但是,不是手動(dòng)下載它們的圖像,而是使用谷歌圖像搜索并拉動(dòng)圖像。要做到這一點(diǎn),我們可以導(dǎo)入一個(gè)很好的包。
查看https://github.com/hardikvasa/google-images-download
讓我們現(xiàn)在重新使用MobileNet,因?yàn)樗浅]p巧(17Mb),讓我們添加和訓(xùn)練前幾個(gè)層。注意我只會(huì)訓(xùn)練兩個(gè)分類器,藍(lán)山雀和烏鴉。
讓我們檢查一下模型架構(gòu)
我們將使用預(yù)先訓(xùn)練的權(quán)重,因?yàn)橐呀?jīng)在Imagenet數(shù)據(jù)集上訓(xùn)練了模型。我們確保所有權(quán)重都是不可訓(xùn)練的,只訓(xùn)練最后幾層密集層。
現(xiàn)在讓我們將訓(xùn)練數(shù)據(jù)加載到ImageDataGenerator中。指定路徑,它會(huì)自動(dòng)發(fā)送批量訓(xùn)練數(shù)據(jù),簡化代碼。
編譯模型。現(xiàn)在讓我們訓(xùn)練吧。在GTX1070 GPU上花費(fèi)不到兩分鐘。
該模型現(xiàn)已接受訓(xùn)練。 現(xiàn)在讓我們測試一些獨(dú)立的輸入圖像來檢查預(yù)測。
輸出:
正如你所看到的,它正確地預(yù)測了烏鴉的圖像,因?yàn)樗{(lán)山雀的圖像被注釋掉了。
烏鴉
這可以進(jìn)一步擴(kuò)展到更多的圖像,更多數(shù)量的分類器可以更好地推廣,但它是實(shí)現(xiàn)CNN遷移學(xué)習(xí)的最輕量級(jí)的方法和最快捷的方式。這當(dāng)然取決于您想要實(shí)現(xiàn)模型的速度、準(zhǔn)確程度和硬件,以及您有多少時(shí)間可用。
關(guān)于如何使用Mobilenet和Keras進(jìn)行遷移學(xué)習(xí)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。