首页 > 其他分享 >使用LIME解释CNN

使用LIME解释CNN

时间:2022-11-12 11:46:14浏览次数:46  
标签:解释 training img random CNN import model LIME size

如何生成人造数据集

最简单的方法是,从数据集中提取一个随机样本,随机打开(1)和关闭(0)一些像素来生成新的数据集

但是通常在图像中,出现的对象(如狗vs猫的分类中的:狗&猫)导致模型的预测会跨越多个像素,而不是一个像素。所以即使你关掉一两个像素,它们看起来仍然和我们选择样本非常相似。

所以这里需要做的是设置一个相邻像素池的ON和OFF,这样才能保证创造的人工数据集的随机性。所以将图像分割成多个称为超像素的片段,然后打开和关闭这些超像素来生成随机样本。

让我们使用LIME进行二进制分类来解释CNN的代码。例如我们有以下的两类数据。

IME示例

 %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()返回模型与原始图像一起预测的高亮区域。

标签:解释,training,img,random,CNN,import,model,LIME,size
From: https://www.cnblogs.com/xiaobu1985/p/16883362.html

相关文章

  • 使用LIME解释CNN
    我们已经介绍过很多解析机器学习模型的方法,例如如pdp、LIME和SHAP,但是这些方法都是用在表格数据的,他们能不能用在神经网络模型呢?今天我们来LIME解释CNN。图像与表格数据集......
  • 8. REM解释一下
    rem(rootem)是c3新增的相对单位,相对的是html根元素,动态变化自己的大小;补充:em也是相对单位,相对的是父元素来动态设置自己大小;px是绝对单位,是相对于屏幕......
  • Sublime如何在每一行行首增加字符串
    第一步:选中全部内容ctrl+A第二步:进入待操作状态ctrl+shift+L第三步:通过←和→控制光标的位置第四步:在光标处添加内容注:也可以只对多行进行操作,对多行进行操作只需在......
  • 初识设计模式 - 解释器模式
    简介在某些情况下,为了更好地描述某一些特定类型的问题,我们可以创建一种新的语言,这种语言拥有自己的表达式和结构,即文法规则。解释器设计模式(InterpreterDesignPattern)......
  • 工厂模式案例解释
    1.1工厂模式​ 工厂模式一般分为简单工厂、工厂方法、抽象工厂,那么什么是简单工厂模式?工厂方法?抽象工厂模式?先看例子,再去看概念和UML图。举例:假设现在有一个项目要......
  • Day07:包机制的详细解释
    包机制包本质就是一个文件夹,当两个类名重合且内容不一致的情况下,需要建立包来收纳同名不同内容的类名。包语句的语法格式packagpkg1.pkg3.pkg3.....;一般采......
  • Linux中:chmod命令详细解释
    一、linux设置目录和文件的权限:1.linux通过chmod命令,设置文件或目录的权限。drwx------(700)-只有属主可在目录中读、写。drwxr-xr-x(755)-所有用户可读该目录,但只......
  • sublime插件
    目录资料前言修改已有语言的插件添加print.sublime-snippet修改插件名称与适用的文件类型添加全局代码片段菜单栏开发Xdd.py文件内容Main.sublime-menu文件内容(可有可无......
  • 【视频】CNN(卷积神经网络)模型以及R语言实现回归数据分析|附代码数据
    无人驾驶汽车最早可以追溯到1989年。神经网络已经存在很长时间了,那么近年来引发人工智能和深度学习热潮的原因是什么呢?答案部分在于摩尔定律以及硬件和计算能力的显著提高。......
  • Hibernate中hibernate.cfg.xml文件和Xxx.hbm.xml文件的详细解释(二)
    勿以恶小而为之,勿以善小而不为--------------------------刘备劝诸君,多行善事积福报,莫作恶上一章简单介绍了Hibernate开发环境的简单搭建及常见错误(一),如果没有看过,​​......