深度洞察与神经网络分析
项目描述
深度洞察与神经网络分析
DIANNA是一个Python包,将可解释人工智能(XAI)引入到您的科研项目中。它使用简单的统一接口封装了精心挑选的XAI方法。它是为(学术)研究人员和研究软件工程师构建的,他们在机器学习项目中工作。
为什么选择DIANNA?
DIANNA软件旨在满足(X)AI研究人员以及主要使用或将要使用AI模型进行研究的各个领域科学家(无需在(X)AI方面是专家)的需求。DIANNA是面向未来的:非常少数支持Open Neural Network Exchange (ONNX)格式的XAI库之一。
在研究了广泛的XAI(可解释人工智能)领域后,我们在XAI分类法中选择了重点关注方法、数据模态和问题类型。我们的选择基于科学文献中最大的使用量,以下是用图形表示的XAI分类法:
DIANNA的关键点
- 为非(X)AI专家提供易于使用的界面
- 实现了知名XAI方法LIME、RISE和KernelSHAP,这些方法是根据系统性和客观的评价标准选择的
- 支持神经网络模型的事实标准ONNX
- 支持图像、文本、时间序列和表格数据模态,当前正在开发嵌入
- 包含简单的直观图像、文本、时间序列和表格基准,可以帮助您进行XAI研究
- 包括科学用例教程
- 易于扩展到其他XAI方法
有关DIANNA与其他工具相比的独特优势的更多信息,请参阅语境景观。
安装
您可以使用任何支持的Python版本的pip从PyPI安装DIANNA(请参阅徽章)
python3 -m pip install dianna
要直接从GitHub仓库安装最新开发版本,请运行
python3 -m pip install git+https://github.com/dianna-ai/dianna.git
如果您在导入dianna时遇到与OpenMP相关的错误,请查看此问题以获取可能的解决方案。
仅适用于配备M1 Pro芯片的MacBook Pro用户的前置条件
- 要安装TensorFlow,您可以按照这个教程进行。
- 要安装TensorFlow Addons,您可以按照这些步骤进行。有关进一步阅读,请参阅此问题。请注意,此临时解决方案仅适用于macOS版本大于等于12.0。请注意,此步骤可能已经更改,请参阅https://github.com/dianna-ai/dianna/issues/245。
- 在安装DIANNA之前,在
setup.cfg
文件中注释掉tensorflow
要求(M1的tensorflow包名为tensorflow-macos
)。
入门指南
您需要
- 您的训练好的ONNX模型(将我的pytorch/tensorflow/keras/scikit-learn模型转换为ONNX)
- 要解释的数据项
您将得到
- 在数据项上叠加的相关性地图
任何数据模态和解释器的模板示例
- 提供您的训练模型和数据项(文本、图像、时间序列或表格)
model_path = 'your_model.onnx' # model trained on your data modality
data_item = <data_item> # data item for which the model's prediction needs to be explained
- 如果任务是分类:您的模型已经训练了哪些类别?
labels = [class_a, class_b] # example of binary classification labels
您想解释这些类别中的哪个?
explained_class_index = labels.index(<explained_class>) # explained_class can be any of the labels
- 使用您选择的解释器('LIME'、'RISE'或'KernalSHAP')运行dianna,并可视化输出
explanation = dianna.<explanation_function>(model_path, data_item, explainer)
dianna.visualization.<visualization_function>(explanation[explained_class_index], data_item)
文本和图像使用示例
让我们用文本数据来阐述上面的模板。感兴趣的数据项是句子的一部分,是电影评论的一部分,并且模型已经训练成将评论分类为正面和负面情绪类别。我们感兴趣的是哪些单词对模型将评论分类为正面有贡献(红色),哪些单词对模型将评论分类为负面有贡献,并且我们想使用LIME解释器
model_path = 'your_text_model.onnx'
# also define a model runner here (details in dedicated notebook)
review = 'The movie started great but the ending is boring and unoriginal.'
labels = ["negative", "positive"]
explained_class_index = labels.index("positive")
explanation = dianna.explain_text(model_path, text, 'LIME')
dianna.visualization.highlight_text(explanation[explained_class_index], model_runner.tokenizer.tokenize(review))
以下是如何使用dianna来解释图像中的哪些部分对将图像分类为蜜蜂有贡献(红色)或负贡献(蓝色)的另一个示例。已经训练好的模型是ImageNet模型,用于区分1000个类别(在labels
中指定)。对于与文本相比维度更高的图像数据,还有一些具体的问题需要考虑
model_path = 'your_image_model.onnx'
image = PIL.Image.open('your_bee_image.jpeg')
axis_labels = {2: 'channels'}
explained_class_index = labels.index('bee')
explanation = dianna.explain_image(model_path, image, 'RISE', axis_labels=axis_labels, labels=labels)
dianna.visualization.plot_image(explanation[explained_class_index], utils.img_to_array(image)/255., heatmap_cmap='bwr')
plt.show()
那么为什么ImageNet会认为同样的图像是花园蜘蛛呢?
explained_class_index = labels.index('garden_spider') # interested in the image being classified as a garden spider
explanation = dianna.explain_image(model_path, image, 'RISE', axis_labels=axis_labels, labels=labels)
dianna.visualization.plot_image(explanation[explained_class_index], utils.img_to_array(image)/255., heatmap_cmap='bwr')
plt.show()
概述教程
我们的概述教程中提供了关于如何使用受支持的解释器和如何使用DIANNA处理所有受支持的数据模态的完整示例。
演示视频(计划更新)
重要:对超参数的敏感性
解释器对超参数的选择非常敏感!在这项工作中,研究了这种对超参数的敏感性,并得出了有价值的结论。DIANNA中每个解释器使用的默认超参数以及教程示例的值可以在教程README中找到。
仪表板
使用DIANNA仪表板探索您训练模型的解释(目前支持图像、文本和时间序列分类)。点击此处获取更多信息。
数据集
DIANNA附带简单数据集。它们的主要目的是提供对XAI方法工作原理的直观见解。它们可以用作评估和比较现有和新XAI方法的基准。
图像
数据集 | 描述 | 示例 | 生成 |
---|---|---|---|
二元MNIST |
灰度图像的数字“1”和“0”——著名MNIST数据集中用于手写数字分类的2类子集。 | 二元MNIST数据集生成 | |
简单几何形状(圆形和三角形) |
圆形和三角形的图像,用于2类几何形状分类。形状的大小和方向以及背景具有不同的均匀灰度水平。 | 简单几何形状数据集生成 | |
简单科学(LeafSnap30) |
树木叶子的彩色图像——LeafSnap数据集中用于自动识别北美树木物种的30类后处理子集。 | LeafSnap30数据集生成 |
文本
数据集 | 描述 | 示例 | 生成 |
---|---|---|---|
斯坦福情感树库 |
用于预测电影评论情感(正面或负面)的数据集。 | 这部电影实际上既不好笑,也不太机智。 | 情感树库 |
时间序列
数据集 | 描述 | 示例 | 生成 |
---|---|---|---|
咖啡数据集 |
食品光谱时间序列数据集,用于区分罗布斯塔咖啡豆和阿拉比卡咖啡豆的两个类别问题。 | 数据源 | |
天气数据集 |
天气预测数据集的轻版本,其中包含2000年至2010年间11个欧洲地点的每日观测数据(89个特征)。 | 数据源 |
表格
数据集 | 描述 | 示例 | 生成 |
---|---|---|---|
企鹅数据集 |
帕默群岛(南极洲)企鹅数据集是一个优秀的入门级数据集,用于数据探索和可视化,类似于著名的鸢尾花数据集。 | 数据源 | |
天气数据集 |
天气预测数据集的轻版本,其中包含2000年至2010年间11个欧洲地点的每日观测数据(89个特征)。 | 数据源 |
ONNX模型
我们使用ONNX! ONNX是一个优秀的统一神经网络标准,可用于促进可重复的科学。使用ONNX对您的模型进行优化也能提升性能!如果您模型目前使用的是其他流行的深度神经网络(DNN)格式,以下是一些简单的转换方法:
- PyTorch和PyTorch Lightning - 使用内置的
torch.onnx.export
函数将PyTorch模型转换为ONNX,或在其LightningModule
上调用内置的to_onnx
函数以将PyTorch Lightning模型导出为ONNX。 - TensorFlow - 使用
tf2onnx
包将TensorFlow模型转换为ONNX。 - Keras - 与从TensorFlow到ONNX的转换相同,
tf2onnx
包也支持Keras。 - scikit-learn - 使用
skl2onnx
包将scikit-learn模型转换为ONNX。
更多转换器、示例和教程可以在ONNX教程页面找到。
以下是一些展示我们如何在大基准数据集上创建模型的笔记本链接
图像
模型 | 生成 |
---|---|
二进制MNIST模型 | 二进制MNIST模型生成 |
简单的几何模型 | 简单的几何形状模型生成 |
简单的科学模型 | LeafSnap30模型生成 |
文本
模型 | 生成 |
---|---|
电影评论模型 | 斯坦福情感树库模型生成 |
时间序列
模型 | 生成 |
---|---|
咖啡模型 | 咖啡模型生成 |
季节预测模型 | 季节预测模型生成 |
快速射电暴分类模型 | 快速射电暴分类模型生成 |
表格
模型 | 生成 |
---|---|
企鹅模型(分类) | 企鹅模型生成 |
日照小时数预测模型(回归) | 日照小时数预测模型生成 |
我们预见ONNX科学模型动物园的诞生...
教程
DIANNA支持不同的数据模态和XAI方法(解释器)。我们使用客观标准评估了许多解释器(请参阅如何找到您的AI解释器博客文章)。下表包含相关XAI方法的论文链接(有关某些方法的解释性视频,请参阅教程)。DIANNA教程涵盖至少一个数据集上每种支持的方法和数据模态,使用默认或调整过的超参数。关于DIANNA扩展到更多数据模态和解释器的计划,请参阅路线图。
数据 \ XAI | RISE | LIME | KernelSHAP |
---|---|---|---|
图像 | ✅ | ✅ | ✅ |
文本 | ✅ | ✅ | |
时间序列 | ✅ | ✅ | |
表格 | 计划中 | ✅ | ✅ |
嵌入 | 进行中 | ||
图形* | 下一步 | ... | ... |
LRP和PatternAttribution也出现在我们彻底评估的解释器的前五名中。此外,GradCAM最近被发现是语义连续的!欢迎通过添加这些和更多(新)后置解释性方法到ONNX模型上做出贡献!
科学应用案例
我们的目标是让科学界接受XAI作为科学问题新颖和未探索视角的来源。在此,我们提供了教程,介绍使用XAI的具体科学用例。
用例(数据) \ XAI | RISE | LIME | KernelSHAP |
---|---|---|---|
生物学(植物形态学):树叶分类(图像) | ✅ | ||
天文学:快速射电暴检测(时序数据) | ✅ | ||
地球科学(栅格数据) | 计划中 | ... | ... |
社会科学(文本) | 进行中 | ... | ... |
气候 | 计划中 | ... | ... |
参考文档
有关使用特定DIANNA函数的详细信息,请访问在Readthedocs托管的文档页面。
贡献
如果您想为DIANNA的开发做出贡献,请查看贡献指南。有关开发者安装、运行测试、生成文档、版本控制和发布的信息,请参阅我们的开发者文档。
如何引用我们
如果您使用此包进行科学工作,请考虑直接引用该软件
Ranguelova, E., Bos, P., Liu, Y., Meijer, C., Oostrum, L., Crocioni, G., Ootes, L., Chandramouli, P., Jansen, A., Smeets, S. (2023). dianna (*[VERSION YOU USED]*). Zenodo. https://zenodo.org/record/5592606
或作为JOSS论文引用
Ranguelova et al., (2022). DIANNA: Deep Insight And Neural Network Analysis. Journal of Open Source Software, 7(80), 4493, https://doi.org/10.21105/joss.04493
有关将软件引用导出到BibTteX和其他格式的信息,请参阅Zenodo页面或JOSS页面。
鸣谢
此软件包是用Cookiecutter和NLeSC/python-template创建的。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。