0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用LIME解釋CNN

穎脈Imgtec ? 2022-11-30 15:45 ? 次閱讀

作者:Mehul Gupta

來源:DeepHub IMBA

我們已經(jīng)介紹過很多解析機(jī)器學(xué)習(xí)模型的方法,例如如pdp、LIME和SHAP,但是這些方法都是用在表格數(shù)據(jù)的,他們能不能用在神經(jīng)網(wǎng)絡(luò)模型呢?今天我們來LIME解釋CNN。

圖像與表格數(shù)據(jù)集有很大不同(顯然)。如果你還記得,在之前我們討論過的任何解釋方法中,我們都是根據(jù)特征重要性,度量或可視化來解釋模型的。比如特征“A”在預(yù)測中比特征“B”有更大的影響力。但在圖像中沒有任何可以命名的特定特征,那么怎么進(jìn)行解釋呢?

一般情況下我們都是用突出顯示圖像中模型預(yù)測的重要區(qū)域的方法觀察可解釋性,這就要求了解如何調(diào)整LIME方法來合并圖像,我們先簡單了解一下LIME是怎么工作的。

5e9bfc46-7045-11ed-b116-dac502259ad0.png

LIME在處理表格數(shù)據(jù)時(shí)為訓(xùn)練數(shù)據(jù)集生成摘要統(tǒng)計(jì):

使用匯總統(tǒng)計(jì)生成一個(gè)新的人造數(shù)據(jù)集

從原始數(shù)據(jù)集中隨機(jī)提取樣本

根據(jù)與隨機(jī)樣本的接近程度為生成人造數(shù)據(jù)集中的樣本分配權(quán)重

用這些加權(quán)樣本訓(xùn)練一個(gè)白盒模型

解釋白盒模型

就圖像而言,上述方法的主要障礙是如何生成隨機(jī)樣本,因?yàn)樵谶@種情況下匯總統(tǒng)計(jì)將沒有任何用處。


如何生成人造數(shù)據(jù)集?最簡單的方法是,從數(shù)據(jù)集中提取一個(gè)隨機(jī)樣本,隨機(jī)打開(1)和關(guān)閉(0)一些像素來生成新的數(shù)據(jù)集但是通常在圖像中,出現(xiàn)的對(duì)象(如狗vs貓的分類中的:狗&貓)導(dǎo)致模型的預(yù)測會(huì)跨越多個(gè)像素,而不是一個(gè)像素。所以即使你關(guān)掉一兩個(gè)像素,它們看起來仍然和我們選擇樣本非常相似。所以這里需要做的是設(shè)置一個(gè)相鄰像素池的ON和OFF,這樣才能保證創(chuàng)造的人工數(shù)據(jù)集的隨機(jī)性。所以將圖像分割成多個(gè)稱為超像素的片段,然后打開和關(guān)閉這些超像素來生成隨機(jī)樣本。讓我們使用LIME進(jìn)行二進(jìn)制分類來解釋CNN的代碼。例如我們有以下的兩類數(shù)據(jù)。類別0: 帶有任意大小的白色矩形的隨機(jī)圖像5ecef33a-7045-11ed-b116-dac502259ad0.png5efbf4d4-7045-11ed-b116-dac502259ad0.png類別1:隨機(jī)生成的圖像(沒有白色矩形)5f258790-7045-11ed-b116-dac502259ad0.png

5f2fdf7e-7045-11ed-b116-dac502259ad0.png

然后創(chuàng)建一個(gè)簡單的CNN模型


LIME示例

%matplotlib inline
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from keras.layers import Input, Dense, Embedding, Flatten
from keras.layers import SpatialDropout1D
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.models import Sequential
from randimage import get_random_image, show_array
import random
import pandas as pd
import numpy as np
import lime
from lime import lime_image
from skimage.segmentation import mark_boundaries

#preparing above dataset artificially
training_dataset = []
training_label = []
for x in range(200):

img_size = (64,64)
img = get_random_image(img_size)

a,b = random.randrange(0,img_size[0]/2),random.randrange(0,img_size[0]/2)
c,d = random.randrange(img_size[0]/2,img_size[0]),random.randrange(img_size[0]/2,img_size[0])

value = random.sample([True,False],1)[0]
if value==False:
img[a:c,b:d,0] = 100
img[a:c,b:d,1] = 100
img[a:c,b:d,2] = 100

training_dataset.append(img)
training_label.append(value)

#training baseline CNN model
training_label = [1-x for x in training_label]
X_train, X_val, Y_train, Y_val = train_test_split(np.array(training_dataset).reshape(-1,64,64,3),np.array(training_label).reshape(-1,1), test_size=0.1, random_state=42)

epochs = 10
batch_size = 32
model = Sequential()
model.add(Conv2D(32, kernel_size=3, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=2))
model.add(Flatten())
# Output layer
model.add(Dense(32,activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, Y_train, validation_data=(X_val, Y_val), epochs=epochs, batch_size=batch_size, verbose=1)

讓我們引入LIME

x=10
explainer = lime_image.LimeImageExplainer(random_state=42)
explanation = explainer.explain_instance(
X_val[x],
model.predict,top_labels=2)
)

image, mask = explanation.get_image_and_mask(0, positives_only=True,
hide_rest=True)

上面的代碼片段需要一些解釋我們初始化了LimeImageExplainer對(duì)象,該對(duì)象使用explain_instance解釋特定示例的輸出。這里我們從驗(yàn)證集中選取了第10個(gè)樣本,Get_image_and_mask()返回模型與原始圖像一起預(yù)測的高亮區(qū)域。讓我們看看一些樣本,它們實(shí)際上是1(隨機(jī)圖像),但檢測到為0(帶白框的隨機(jī)圖像)5f578f74-7045-11ed-b116-dac502259ad0.png5f63c582-7045-11ed-b116-dac502259ad0.png可以看到下圖有黃色的突出顯示區(qū)域,這張圖片的標(biāo)簽為1,但被標(biāo)記為0,這是因?yàn)楦吡溜@示的區(qū)域看起來像一個(gè)矩形,因此讓模型感到困惑,也就是說模型錯(cuò)吧黃色標(biāo)記的部分當(dāng)成了我們需要判斷的白色矩形遮蔽。5f8d5320-7045-11ed-b116-dac502259ad0.png5f99bc14-7045-11ed-b116-dac502259ad0.png再看看上面兩個(gè)圖,與前面的例子類似,模型也預(yù)測了class=0。通過黃色區(qū)域可以判斷,某種形狀可能被模型曲解為白色方框了。

這樣我們就可以理解模型導(dǎo)致錯(cuò)誤分類的實(shí)際問題是什么,這就是為什么可解釋和可解釋的人工智能如此重要。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8306

    瀏覽量

    131848
  • cnn
    cnn
    +關(guān)注

    關(guān)注

    3

    文章

    349

    瀏覽量

    21969
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    cnn常用的幾個(gè)模型有哪些

    CNN(卷積神經(jīng)網(wǎng)絡(luò))是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、自然語言處理等領(lǐng)域。以下是一些常用的CNN模型: LeNet-5:LeNet-5是最早的卷積神經(jīng)網(wǎng)絡(luò)之一,由Yann LeCun等人于
    的頭像 發(fā)表于 07-11 14:58 ?312次閱讀

    圖像分割與語義分割中的CNN模型綜述

    圖像分割與語義分割是計(jì)算機(jī)視覺領(lǐng)域的重要任務(wù),旨在將圖像劃分為多個(gè)具有特定語義含義的區(qū)域或?qū)ο蟆>矸e神經(jīng)網(wǎng)絡(luò)(CNN)作為深度學(xué)習(xí)的一種核心模型,在圖像分割與語義分割中發(fā)揮著至關(guān)重要的作用。本文將從CNN模型的基本原理、在圖像分割與語義分割中的應(yīng)用、以及具體的模型架構(gòu)和調(diào)
    的頭像 發(fā)表于 07-09 11:51 ?341次閱讀

    CNN與RNN的關(guān)系?

    在深度學(xué)習(xí)的廣闊領(lǐng)域中,卷積神經(jīng)網(wǎng)絡(luò)(CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是兩種極為重要且各具特色的神經(jīng)網(wǎng)絡(luò)模型。它們各自在圖像處理、自然語言處理等領(lǐng)域展現(xiàn)出卓越的性能。本文將從概念、原理、應(yīng)用場景及代碼示例等方面詳細(xì)探討CNN與RNN的關(guān)系,旨在深入理解這兩種網(wǎng)絡(luò)模型及其在
    的頭像 發(fā)表于 07-08 16:56 ?316次閱讀

    CNN的定義和優(yōu)勢

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)作為深度學(xué)習(xí)領(lǐng)域的核心成員,不僅在學(xué)術(shù)界引起了廣泛關(guān)注,更在工業(yè)界尤其是計(jì)算機(jī)視覺領(lǐng)域展現(xiàn)出了巨大的應(yīng)用價(jià)值。關(guān)于
    的頭像 發(fā)表于 07-05 17:37 ?535次閱讀

    如何利用CNN實(shí)現(xiàn)圖像識(shí)別

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)是深度學(xué)習(xí)領(lǐng)域中一種特別適用于圖像識(shí)別任務(wù)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。它通過模擬人類視覺系統(tǒng)的處理方式,利用卷積、池化等操作,自動(dòng)提取圖像中的特征,進(jìn)而實(shí)現(xiàn)高效的圖像識(shí)別。本文將從CNN的基本原理、構(gòu)建過程、訓(xùn)練策略以及應(yīng)用場景等方面,詳細(xì)闡述如何利用
    的頭像 發(fā)表于 07-03 16:16 ?479次閱讀

    NLP模型中RNN與CNN的選擇

    在自然語言處理(NLP)領(lǐng)域,循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)與卷積神經(jīng)網(wǎng)絡(luò)(CNN)是兩種極為重要且廣泛應(yīng)用的網(wǎng)絡(luò)結(jié)構(gòu)。它們各自具有獨(dú)特的優(yōu)勢,適用于處理不同類型的NLP任務(wù)。本文旨在深入探討RNN與CNN
    的頭像 發(fā)表于 07-03 15:59 ?209次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)分類有哪些

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像分類、目標(biāo)檢測、語義分割等領(lǐng)域。本文將詳細(xì)介紹CNN在分類任務(wù)中的應(yīng)用,包括基本結(jié)構(gòu)、關(guān)鍵技術(shù)、常見網(wǎng)絡(luò)架構(gòu)以及實(shí)際應(yīng)用案例。 引言 1.1
    的頭像 發(fā)表于 07-03 09:28 ?320次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)三大特點(diǎn)是什么

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、視頻分析、自然語言處理等領(lǐng)域。CNN具有以下三大特點(diǎn): 局部連接
    的頭像 發(fā)表于 07-03 09:26 ?321次閱讀

    CNN模型的基本原理、結(jié)構(gòu)、訓(xùn)練過程及應(yīng)用領(lǐng)域

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、視頻分析、自然語言處理等領(lǐng)域。CNN模型的核心是卷積層
    的頭像 發(fā)表于 07-02 15:26 ?1623次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)cnn模型有哪些

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、視頻分析、自然語言處理等領(lǐng)域。 CNN的基本概念 1.1 卷積層
    的頭像 發(fā)表于 07-02 15:24 ?524次閱讀

    深度神經(jīng)網(wǎng)絡(luò)模型cnn的基本概念、結(jié)構(gòu)及原理

    深度神經(jīng)網(wǎng)絡(luò)模型CNN(Convolutional Neural Network)是一種廣泛應(yīng)用于圖像識(shí)別、視頻分析和自然語言處理等領(lǐng)域的深度學(xué)習(xí)模型。 引言 深度學(xué)習(xí)是近年來人工智能領(lǐng)域的研究熱點(diǎn)
    的頭像 發(fā)表于 07-02 10:11 ?8789次閱讀

    基于Python和深度學(xué)習(xí)的CNN原理詳解

    卷積神經(jīng)網(wǎng)絡(luò) (CNN) 由各種類型的層組成,這些層協(xié)同工作以從輸入數(shù)據(jù)中學(xué)習(xí)分層表示。每個(gè)層在整體架構(gòu)中都發(fā)揮著獨(dú)特的作用。
    的頭像 發(fā)表于 04-06 05:51 ?1746次閱讀
    基于Python和深度學(xué)習(xí)的<b class='flag-5'>CNN</b>原理詳解

    基于CNN-LSTM網(wǎng)絡(luò)的電力負(fù)荷預(yù)測

    為了及時(shí)掌握電力負(fù)荷的變動(dòng)信息,就需要對(duì)電力負(fù)荷進(jìn)行準(zhǔn)確預(yù)測。鑒于此,探究出一種CNN和LSTM的組合模型來預(yù)測一日到一周的電力短期負(fù)荷波動(dòng)情況。CNN模型負(fù)責(zé)從輸入信息中提取特征,LSTM模型利用
    的頭像 發(fā)表于 11-09 14:13 ?3252次閱讀
    基于<b class='flag-5'>CNN</b>-LSTM網(wǎng)絡(luò)的電力負(fù)荷預(yù)測

    基于VC++6.0的SCPI解釋器設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于VC++6.0的SCPI解釋器設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-24 14:10 ?3次下載
    基于VC++6.0的SCPI<b class='flag-5'>解釋</b>器設(shè)計(jì)

    什么是卷積神經(jīng)網(wǎng)絡(luò)?如何MATLAB實(shí)現(xiàn)CNN?

    卷積神經(jīng)網(wǎng)絡(luò)(CNN 或 ConvNet)是一種直接從數(shù)據(jù)中學(xué)習(xí)的深度學(xué)習(xí)網(wǎng)絡(luò)架構(gòu)。 CNN 特別適合在圖像中尋找模式以識(shí)別對(duì)象、類和類別。它們也能很好地對(duì)音頻、時(shí)間序列和信號(hào)數(shù)據(jù)進(jìn)行分類。
    發(fā)表于 10-12 12:41 ?1384次閱讀
    什么是卷積神經(jīng)網(wǎng)絡(luò)?如何MATLAB實(shí)現(xiàn)<b class='flag-5'>CNN</b>?