訂閱
糾錯(cuò)
加入自媒體

使用Python可視化卷積神經(jīng)網(wǎng)絡(luò)方法匯總

介紹深入學(xué)習(xí)中最具爭(zhēng)議的話題之一是如何解釋和理解一個(gè)經(jīng)過訓(xùn)練的模型——特別是在醫(yī)療等高風(fēng)險(xiǎn)行業(yè)的背景下!昂谙蛔印币辉~經(jīng)常與深度學(xué)習(xí)算法聯(lián)系在一起,如果我們不能解釋模型是如何工作的,我們?cè)趺茨芟嘈拍P偷慕Y(jié)果呢?這是個(gè)合理的問題。以一個(gè)為檢測(cè)癌癥而訓(xùn)練的深度學(xué)習(xí)模型為例,這個(gè)模型告訴你,它99%確定它已經(jīng)檢測(cè)到癌癥,但它并沒有告訴你為什么或者如何做出這個(gè)決定。是在核磁共振掃描中找到了重要線索的呢?還是只是掃描上的污點(diǎn)被錯(cuò)誤地檢測(cè)為腫瘤?這是病人生死攸關(guān)的問題,醫(yī)生犯了錯(cuò)后果是很嚴(yán)重。

在本文中,我們將探討如何可視化卷積神經(jīng)網(wǎng)絡(luò)(CNN),這是一種深入學(xué)習(xí)的體系結(jié)構(gòu),被用于最先進(jìn)的基于圖像的應(yīng)用程序;我們將了解可視化CNN模型的重要性,以及可視化它們的方法;我們還將看一個(gè)用例,它將幫助你更好地理解這個(gè)概念。目錄CNN模型可視化的重要性可視化方法顯著圖基于梯度的類激活圖最大激活圖像遮擋繪制模型架構(gòu)可視化濾波器基本方法基于激活的方法基于梯度的方法CNN模型可視化的重要性正如我們?cè)谏厦娴陌┌Y腫瘤例子中所看到的,我們知道我們的模型在做什么,以及它如何對(duì)預(yù)測(cè)做出決定,這是絕對(duì)重要的。通常,下面列出的原因是一個(gè)深度學(xué)習(xí)實(shí)踐者要記住的最重要的知識(shí)點(diǎn):了解模型的工作原理超參數(shù)調(diào)整找出模型的失敗之處并能夠解決失敗向消費(fèi)者/最終用戶或業(yè)務(wù)主管解釋決策讓我們看一個(gè)例子,在這個(gè)例子中,可視化一個(gè)神經(jīng)網(wǎng)絡(luò)模型有助于理解模型一些不好的行為和提高性能(下面的例子來自:http://intelligence.org/files/AIPosNegFactor.pdf)。曾幾何時(shí),美國陸軍想使用神經(jīng)網(wǎng)絡(luò)來自動(dòng)檢測(cè)偽裝的敵方坦克。研究人員用50張樹木偽裝的坦克照片和50張沒有坦克的樹木照片訓(xùn)練了神經(jīng)網(wǎng)絡(luò),使用標(biāo)準(zhǔn)技術(shù)來進(jìn)行監(jiān)督學(xué)習(xí),研究人員對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行了訓(xùn)練,使其權(quán)重能夠正確加載訓(xùn)練集:對(duì)50張偽裝坦克的照片輸出“是”,對(duì)50張樹木照片的輸出“否”。這并不能確保新的例子也可以被正確分類。神經(jīng)網(wǎng)絡(luò)可能已經(jīng)“學(xué)習(xí)”了100個(gè)不會(huì)泛化到任何新問題的特殊情況,聰明的是,研究人員最初拍攝了200張照片,100張?zhí)箍苏掌?00張樹木照片,他們?cè)谟?xùn)練場(chǎng)只使用了50個(gè)。研究人員在剩下的100張照片上運(yùn)行了神經(jīng)網(wǎng)絡(luò),在沒有進(jìn)一步訓(xùn)練的情況下,神經(jīng)網(wǎng)絡(luò)對(duì)剩下的所有照片進(jìn)行了正確的分類。不錯(cuò)!研究人員把完成的工作結(jié)果交給五角大樓,五角大樓很快就把工作交還給了他們,他們抱怨說,在他們自己的測(cè)試中,神經(jīng)網(wǎng)絡(luò)在辨別照片方面跟隨機(jī)差不多。

結(jié)果發(fā)現(xiàn),在研究人員的數(shù)據(jù)集中,偽裝坦克的照片是在陰天拍攝的,而沒有偽裝的照片是在晴天拍攝的。神經(jīng)網(wǎng)絡(luò)學(xué)會(huì)了區(qū)分陰天和晴天,而不是區(qū)分偽裝坦克和空曠的森林。CNN模型的可視化方法大體上,CNN模型的可視化方法可以根據(jù)其內(nèi)部工作方式分為三個(gè)部分基本方法-向我們展示訓(xùn)練模型總體架構(gòu)的簡(jiǎn)單方法基于激活的方法-在這些方法中,我們破譯單個(gè)神經(jīng)元或一組神經(jīng)元的激活函數(shù),以理解它們正在做什么基于梯度的方法-這些方法傾向于在訓(xùn)練模型時(shí)操縱由向前和反向傳播形成的梯度我們將在下面的章節(jié)中詳細(xì)介紹它們。在這里,我們將使用keras作為我們的庫來構(gòu)建深度學(xué)習(xí)模型,并使用keras-vis來可視化它們。在繼續(xù)之前,請(qǐng)確保你已經(jīng)在系統(tǒng)中安裝了這些程序。注:本文使用“Identify the Digits”競(jìng)賽中給出的數(shù)據(jù)集,要運(yùn)行下面提到的代碼,你必須在系統(tǒng)中下載它。另外,在開始下面的實(shí)現(xiàn)之前,請(qǐng)執(zhí)行要求的步驟。數(shù)據(jù)集:https://datahack.a(chǎn)nalyticsvidhya.com/contest/practice-problem-identify-the-digits/準(zhǔn)備步驟:https://www.a(chǎn)nalyticsvidhya.com/keras_script-py/1.基本方法1.1 繪制模型架構(gòu)最簡(jiǎn)單的方法就是打印模型。在這里,你還可以打印神經(jīng)網(wǎng)絡(luò)中各個(gè)層的形狀和每個(gè)層的參數(shù)。在keras中,可以按如下方式實(shí)現(xiàn):model.summary()_________________________________________________________________Layer (type)                 Output Shape              Param #   =================================================================conv2d_1 (Conv2D)            (None, 26, 26, 32)        320       _________________________________________________________________conv2d_2 (Conv2D)            (None, 24, 24, 64)        18496     _________________________________________________________________max_pooling2d_1 (MaxPooling2 (None, 12, 12, 64)        0         _________________________________________________________________dropout_1 (Dropout)          (None, 12, 12, 64)        0         _________________________________________________________________flatten_1 (Flatten)          (None, 9216)              0         _________________________________________________________________dense_1 (Dense)              (None, 128)               1179776   _________________________________________________________________dropout_2 (Dropout)          (None, 128)               0         _________________________________________________________________preds (Dense)                (None, 10)                1290      =================================================================Total params: 1,199,882Trainable params: 1,199,882Non-trainable params: 0為了更具創(chuàng)造性和表現(xiàn)力,你可以繪制一個(gè)架構(gòu)圖(keras.utils.vis_utils函數(shù))。

1.2 可視化濾波器另一種方法是繪制訓(xùn)練模型的濾波器,以便我們可以了解這些濾波器的行為。例如,上述模型第一層的第一個(gè)濾波器如下所示:top_layer = model.layers[0]plt.imshow(top_layer.get_weights()[0][:, :, :, 0].squeeze(), cmap='gray')

一般來說,我們看到低層的濾波器起到邊緣探測(cè)器的作用,當(dāng)我們走得更高時(shí),它們傾向于捕捉像物體和人臉這樣的高層概念。

1  2  3  下一頁>  
聲明: 本文由入駐維科號(hào)的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無評(píng)論

暫無評(píng)論

    掃碼關(guān)注公眾號(hào)
    OFweek人工智能網(wǎng)
    獲取更多精彩內(nèi)容
    文章糾錯(cuò)
    x
    *文字標(biāo)題:
    *糾錯(cuò)內(nèi)容:
    聯(lián)系郵箱:
    *驗(yàn) 證 碼:

    粵公網(wǎng)安備 44030502002758號(hào)