设置场景
给概览功能的可视化作为一个研究领域,并推出了FlashTorch- 一个开放源码的功能可视化工具包建在PyTorch神经网络。
该软件包可通过安装pip。查看GitHub仓库的源代码。也可以在Google Colab上托管的这款笔记本中使用它,而无需安装任何东西!
https://github.com/MisaOgura/flashtorch
https://colab.research.google.com/github/MisaOgura/flashtorch/blob/master/examples/visualise_saliency_with_backprop_colab.ipynb
使用FlashTorch进行功能可视化
通过创建 AlexNet的显着图来实现的,该图是在ImageNet分类任务上预先训练过的。从任务中选择了三个类(灰色的大猫头鹰,孔雀和巨嘴鸟),并使用这些类的图像来检查AlexNet学到了什么,以便在识别这些对象时最集中在图像中。
从本质上讲,采用了一个知道在要求它做的事情上表现良好的网络,并检查了它的看法。这本身就很有趣。希望注意力从仅仅看到了测试精度迁移和开始问什么网络实际上做的事情。
什么是神经网络感知?
为什么它的行为方式如此?
如何解释其决定/预测?
创建的目的FlashTorch是让这些问题更容易回答。而这些问题是不是只是因为有良好的执行网络!
在现实中,它是远远更常见的有,想让它不执行,以及网络。但在这里常常被准确性所困扰。当看到表现不佳时,倾向于直接接受训练,而没有花太多时间来理解为什么表现如此糟糕。
FlashTorch可以帮助做到这一点,想在迁移学习的背景下用一个例子来证明它。
迁移倾向
机器学习中的迁移倾向是知识转移的一种形式 - 一种方法,其中使用经过一项任务训练的模型,通常作为另一项任务的起点。新任务所需的额外训练数量取决于原始任务和新任务的相似性,训练数据的可用性等。
传统学习与迁移学习
迁移学习通常用于计算机视觉和自然语言处理任务,因为它通过利用先前的训练帮助节省计算/时间资源。
例如,在ImageNet(1000个类)上训练的网络可以重新用作狗标识符,而无需额外的训练。或者可以将在大型文本语料(例如来自Google的Word2Vec)上训练的单词嵌入引入另一个深度神经网络,以从新的语料库中提取单词的向量表示。
ImageNet→花卉分类器
为了测试迁移学习的动力,决定把DenseNet,在ImageNet任务预先训练,到用花分类102类花卉数据集。
http://www.robots.ox.ac.uk/~vgg/data/flowers/102/index.html
事实证明,该模型没有经过任何进一步的训练,表现得非常糟糕 - 高达0.1%的测试精度!如果已经完成了数学计算......会更好地随意猜测它。
直觉上,这可能是有道理的。原始的ImageNet数据集中只包含少数几个花类,因此要求模型识别102种花卉是推动的图像并不太难。
使用FlashTorch创建显着性图并可视化网络(不)看到的内容。将以毛地黄的这个图像为例。
在这里可以欣赏的是,没有额外训练的网络正在关注花杯的形状。但是有许多形状相似的花(例如蓝铃花)。
对于人类而言,可能很明显(即使不知道该物种的名称)这种花朵的独特之处在于花杯内的斑驳图案。然而网络目前还不知道在哪里要注意,除了花的一般形状,因为它从来没有真正需要在旧任务(ImageNet分类)。
现在有一个深入了解,为什么在网络表现不佳,觉得准备训练它。最终经过反复试验,训练有素的模型达到了98.7%的测试精度。
网络已经学会减少对花的形状的关注,并强烈关注那些斑驳的图案:)
显示什么样的神经网络学会是非常有用的。将其提升到另一个层次并解释神经网络如何学习的过程是特征可视化技术的另一个强大应用。
从准确性向前迈进
通过特征可视化技术,不仅可以更好地了解神经网络对物体的感知,而且还可以更好地:
- 诊断网络出错的原因和原因
- 找出并纠正算法中的偏差
- 从仅仅看准确性向前迈进
- 了解网络行为的原因
- 阐明神经网络如何学习的机制
立即使用FlashTorch!
如果有在PyTorch中使用CNN的项目,FlashTorch可以帮助你使项目更具解释性和可解释性。