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

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

3. 基于梯度的方法3.1 顯著性圖正如我們?cè)谔箍说睦又兴吹降,我們(nèi)绾尾拍苤牢覀兊哪P完P(guān)注哪個(gè)部分來(lái)獲得預(yù)測(cè)?為此,我們可以使用顯著性圖。使用顯著性圖的概念是非常直接的——我們計(jì)算輸出類別相對(duì)于輸入圖像的梯度,這可以告訴我們輸出類別值相對(duì)于輸入圖像像素的微小變化是如何變化的。梯度中的所有正值都告訴我們,對(duì)該像素的微小更改將增加輸出值,因此,將這些與圖像形狀相同的梯度可視化,應(yīng)該能提供一些直覺。直觀地,該方法突出了對(duì)輸出貢獻(xiàn)最大的顯著圖像區(qū)域。class_idx = 0indices = np.where(val_y[:, class_idx] == 1.)[0]

# 從這里選取一些隨機(jī)輸入。idx = indices[0]

# 讓sanity檢查選中的圖像。from matplotlib import pyplot as plt%matplotlib inlineplt.rcParams['figure.figsize'] = (18, 6)

plt.imshow(val_x[idx][..., 0])

from vis.visualization import visualize_saliencyfrom vis.utils import utilsfrom keras import activations

# 按名稱搜索圖層索引# 或者,我們可以將其指定為-1,因?yàn)樗鼘?duì)應(yīng)于最后一層。layer_idx = utils.find_layer_idx(model, 'preds')

# 用線性層替換softmaxmodel.layers[layer_idx].a(chǎn)ctivation = activations.linearmodel = utils.a(chǎn)pply_modifications(model)

grads = visualize_saliency(model, layer_idx, filter_indices=class_idx, seed_input=val_x[idx])# 可視化為熱圖。plt.imshow(grads, cmap='jet')

# 線性層。for class_idx in np.a(chǎn)range(10):     indices = np.where(val_y[:, class_idx] == 1.)[0]    idx = indices[0]

   f, ax = plt.subplots(1, 4)    ax[0].imshow(val_x[idx][..., 0])

   for i, modifier in enumerate([None, 'guided', 'relu']):        grads = visualize_saliency(model, layer_idx, filter_indices=class_idx,         seed_input=val_x[idx], backprop_modifier=modifier)        if modifier is None:            modifier = 'vanilla'        ax[i+1].set_title(modifier)         ax[i+1].imshow(grads, cmap='jet')

3.2 基于梯度的類激活圖類激活圖是另一種在進(jìn)行預(yù)測(cè)時(shí)可視化模型所看到內(nèi)容的方法,使用倒數(shù)第二卷積層輸出,而不是使用相對(duì)于輸出的梯度,這樣做是為了利用存儲(chǔ)在倒數(shù)第二層的空間信息。from vis.visualization import visualize_cam

# 線性層。for class_idx in np.a(chǎn)range(10):  indices = np.where(val_y[:, class_idx] == 1.)[0] idx = indices[0]

f, ax = plt.subplots(1, 4) ax[0].imshow(val_x[idx][..., 0])

for i, modifier in enumerate([None, 'guided', 'relu']):    grads = visualize_cam(model, layer_idx, filter_indices=class_idx,     seed_input=val_x[idx], backprop_modifier=modifier)     if modifier is None:        modifier = 'vanilla'    ax[i+1].set_title(modifier)     ax[i+1].imshow(grads, cmap='jet')

結(jié)尾在本文中,我們介紹了如何可視化CNN模型,以及為什么要可視化,我們結(jié)合一個(gè)例子來(lái)實(shí)現(xiàn)它。參考鏈接:https://www.a(chǎn)nalyticsvidhya.com/blog/2018/03/essentials-of-deep-learning-visualizing-convolutional-neural-networks/

☆ END ☆

<上一頁(yè)  1  2  3  
聲明: 本文由入駐維科號(hào)的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wè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)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

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

暫無(wú)評(píng)論

暫無(wú)評(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)