在上一篇博客LIME算法:模型的可解释性(代码实现)中,我整理了LIME算法的原理及在文本分类模型中的应用。在这篇笔记中,我记录了LIME算法在图像分类模型中的应用及过程中遇到的问题和解决方法。
一、算法简介
LIME算法是Marco Tulio Ribeiro2016年发表的论文《“Why Should I Trust You?” Explaining the Predictions of Any Classifier》中介绍的局部可解释性模型算法。该算法主要是用在文本类与图像类的模型中。
在日常测试图像分类模型时,常常会得到一些莫名其妙的预测结果。我拿我家小猫的照片做测试,得出的预测结果竟然有“纸箱、安全带”这样的分类:
我忍不住想知道,我家小猫到底哪部分长得像安全带?而要得到这个答案,就可以利用LIME解释器来帮助解释。
二、LIME解释器代码实现
要实现LIME解释器在图像分类模型中的应用,首先要有一个已经建模完成的图像分类模型,这里参考lime算法的GitHub实例,基于keras框架下载Google Inception net-v3深度神经网络模型。
#加载需要的包
import os
import keras
from keras.applications import inception_v3 as inc_net
from keras.preprocessing import image
from keras.applications.imagenet_utils import decode_predictions
from skimage.io import imread
import matplotlib.pyplot as plt
import numpy as np
print('Notebook run using keras:', keras.__version__)
#下载Google Inception net-v3深度神经网络模型
inet_model = inc_net.InceptionV3()
对待分类图像做数据预处理
def transform_img_fn(path_list):
out = []
for img_path in path_list:
img = image.load_img(img_path, target_size=(299