0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用LIME解释CNN

Dbwd_Imgtec ? 来源:未知 ? 2022-11-25 11:15 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:Mehul Gupta

来源:DeepHub IMBA


我们已经介绍过很多解析机器学习模型的方法,例如如pdp、LIME和SHAP,但是这些方法都是用在表格数据的,他们能不能用在神经网络模型呢?今天我们来LIME解释CNN。

图像与表格数据集有很大不同(显然)。如果你还记得,在之前我们讨论过的任何解释方法中,我们都是根据特征重要性,度量或可视化来解释模型的。比如特征“A”在预测中比特征“B”有更大的影响力。但在图像中没有任何可以命名的特定特征,那么怎么进行解释呢?

一般情况下我们都是用突出显示图像中模型预测的重要区域的方法观察可解释性,这就要求了解如何调整LIME方法来合并图像,我们先简单了解一下LIME是怎么工作的。

LIME在处理表格数据时为训练数据集生成摘要统计:

  • 使用汇总统计生成一个新的人造数据集

  • 从原始数据集中随机提取样本

  • 根据与随机样本的接近程度为生成人造数据集中的样本分配权重

  • 用这些加权样本训练一个白盒模型

  • 解释白盒模型

就图像而言,上述方法的主要障碍是如何生成随机样本,因为在这种情况下汇总统计将没有任何用处。

如何生成人造数据集?

最简单的方法是,从数据集中提取一个随机样本,随机打开(1)和关闭(0)一些像素来生成新的数据集
但是通常在图像中,出现的对象(如狗vs猫的分类中的:狗&猫)导致模型的预测会跨越多个像素,而不是一个像素。所以即使你关掉一两个像素,它们看起来仍然和我们选择样本非常相似。
所以这里需要做的是设置一个相邻像素池的ON和OFF,这样才能保证创造的人工数据集的随机性。所以将图像分割成多个称为超像素的片段,然后打开和关闭这些超像素来生成随机样本。
让我们使用LIME进行二进制分类来解释CNN的代码。例如我们有以下的两类数据。

类别0: 带有任意大小的白色矩形的随机图像
类别1:随机生成的图像(没有白色矩形)

然后创建一个简单的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对象,该对象使用explain_instance解释特定示例的输出。这里我们从验证集中选取了第10个样本,Get_image_and_mask()返回模型与原始图像一起预测的高亮区域。
让我们看看一些样本,它们实际上是1(随机图像),但检测到为0(带白框的随机图像)

可以看到下图有黄色的突出显示区域,这张图片的标签为1,但被标记为0,这是因为高亮显示的区域看起来像一个矩形,因此让模型感到困惑,也就是说模型错吧黄色标记的部分当成了我们需要判断的白色矩形遮蔽。
再看看上面两个图,与前面的例子类似,模型也预测了class=0。通过黄色区域可以判断,某种形状可能被模型曲解为白色方框了。

这样我们就可以理解模型导致错误分类的实际问题是什么,这就是为什么可解释和可解释的人工智能如此重要。

END


欢迎加入Imagination GPU与人工智能交流2群
入群请加小编微信:eetrend89

(添加请备注公司名和职称)

推荐阅读


Imagination 基于 O3DE 引擎的光线追踪 Demo 详解

Imagination Technologies是一家总部位于英国的公司,致力于研发芯片和软件知识产权(IP),基于Imagination IP的产品已在全球数十亿人的电话、汽车、家庭和工作场所中使用。获取更多物联网智能穿戴、通信汽车电子、图形图像开发等前沿技术信息,欢迎关注 Imagination Tech!


原文标题:使用LIME解释CNN

文章出处:【微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • imagination
    +关注

    关注

    1

    文章

    604

    浏览量

    62428

原文标题:使用LIME解释CNN

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    养生壶主板用的是阻容降压,拆了一个养生壶,自己画了电路图,解释不通,没看明白原理?

    养生壶主板用的是阻容降压,拆了一个养生壶,自己画了电路图,解释不通,没看明白原理?
    发表于 08-01 00:29

    【高云GW5AT-LV60 开发套件试用体验】基于开发板进行深度学习实践,并尽量实现皮肤病理图片的识别,第四阶段

    接第三阶段,上次说道要将cnn这个模块接入到高云自带的视频实例里面,于是就开始学习和了解这个实例里面的每个模块的功能,后来发现,除了要看一下高云自己的ip文档外,还要看很多视频处理相关的协议文档
    发表于 07-12 07:58

    【高云GW5AT-LV60 开发套件试用体验】基于开发板进行深度学习实践,并尽量实现皮肤病理图片的识别,第三阶段

    接上回,这次说一说第三阶段的进展,一直在想如何将cnn融合进高云以后的视频案例里面,比如:下图 上面图中文件之间的关系应该是这样的: 一、 完整的视频数据处理流程 根据这些文件名,我们可以清晰地勾勒
    发表于 07-06 15:18

    【高云GW5AT-LV60 开发套件试用体验】基于开发板进行深度学习实践,并尽量实现皮肤病理图片的识别

    。 `clahe.py 但是上面的代码和相关的逻辑暂时就停在这里了。 后来又过了几天,尝试一些有关cnn的实现。 记得在综合的时候要将这个文件里面的模块名替换一下: 上面虽然综合通过,但是还有一些警告。后面有时间的话
    发表于 06-11 22:35

    算力领域常用名词解释

    本文系统地整理和解释了算力领域中常用的数十个关键名词,并按照以下维度进行了分类:基础概念、系统架构、硬件架构、基础运算类型、计算模式、相关软件架构与部署模式、浮点精度格式、算力类型、算力关联与服务
    的头像 发表于 04-07 11:21 ?655次阅读
    算力领域常用名词<b class='flag-5'>解释</b>

    一个过零检测电路,但有部分电路没看明白,有大神可以详细解释一下吗

    一个过零检测电路,但是没明白粉色框部分有什么作用,有大神可以详细解释一下吗
    发表于 03-20 00:40

    无法转换TF OD API掩码RPGA模型怎么办?

    \'/Tensorflow-Object-Detection-API-train-custom-Mask-R-CNN-model-master/inference_graph/saved_model\' >
    发表于 03-06 06:44

    大模型领域常用名词解释(近100个)

    本文总结了大模型领域常用的近100个名词解释,并按照模型架构与基础概念,训练方法与技术,模型优化与压缩,推理与应用,计算与性能优化,数据与标签,模型评估与调试,特征与数据处理,伦理与公平性、其他
    的头像 发表于 02-19 11:49 ?935次阅读
    大模型领域常用名词<b class='flag-5'>解释</b>(近100个)

    小白学解释性AI:从机器学习到大模型

    科学AI需要可解释性人工智能的崛起,尤其是深度学习的发展,在众多领域带来了令人瞩目的进步。然而,伴随这些进步而来的是一个关键问题——“黑箱”问题。许多人工智能模型,特别是复杂的模型,如神经网
    的头像 发表于 02-10 12:12 ?720次阅读
    小白学<b class='flag-5'>解释</b>性AI:从机器学习到大模型

    cmdgc5016生成的配置寄存器值居然没有变化,有人能解释下吗?

    最近在上手GC5016片子。配置文件用的是官网上下载的“tsin_r0_v1p1”,用以在4个通道上生成不同的输出频率。在配置时发现,我修改“tsin_r0_v1p1”文件中的fck值,cmdgc5016生成的配置寄存器值居然没有变化。有人能解释下吗??
    发表于 01-22 06:51

    解释什么是双绞线

    双绞线是一种常用的通信传输介质,由两根相互绝缘的金属导线(通常是铜导线)按一定密度互相绞合在一起组成。以下是关于双绞线的详细解释: 一、结构特点 导线材料:双绞线通常由两根22~26号绝缘铜导线组成
    的头像 发表于 01-17 10:53 ?1368次阅读

    FPAG技术问题合集

    今天给大侠带来在FPAG技术交流群里平时讨论的问题答疑合集,以后还会多推出本系列,话不多说,上货。 交流问题 ? Q :大佬们,谁做过FPGA 的一维卷积神经网络(1D-CNN)算法加速么?除了
    的头像 发表于 12-07 10:05 ?805次阅读

    虚拟主机名词解释

    虚拟主机(Virtual Host/Virtual Server)是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。以下是关于虚拟主机的详细解释,rak小编为您整理发布虚拟主机名词解释
    的头像 发表于 10-25 09:26 ?822次阅读

    EAK解释了如何为船舶推进器应用选择合适的0电感水冷功率电阻器

    在过去五年中,英国海事部门的生产力迅速提高。在建造或翻新船舶时选择要包含的正确组件对于确保生产力和效率保持较高水平至关重要。在这里,功率电阻器制造商 EAK 的项目总监解释了如何为您的船舶应用选择合适的电阻器。
    的头像 发表于 10-09 07:50 ?576次阅读
    EAK<b class='flag-5'>解释</b>了如何为船舶推进器应用选择合适的0电感水冷功率电阻器

    深度识别算法包括哪些内容

    深度识别算法是深度学习领域的一个重要组成部分,它利用深度神经网络模型对输入数据进行高层次的理解和识别。深度识别算法涵盖了多个方面的内容,主要包括以下几种类型: 1. 卷积神经网络(CNN) 概述
    的头像 发表于 09-10 15:28 ?930次阅读