主要内容

探索网络预测使用深度学习的可视化技术

这个例子展示了如何使用深度学习调查网络预测可视化技术。

深入学习网络常常被描述为“黑匣子”因为为什么网络使某种决策并不总是显而易见的。您可以使用一个可解释性技术网络行为转化为输出,一个人可以解释。这可说明的输出可以回答关于网络的预测问题。这个例子主要关注可视化方法,可解释性技术解释网络预测使用网络是“看”的直观表示。

负载Pretrained网络

加载一个pretrained图像分类网络。对于这个示例,使用GoogLeNet, pretrained网络图像划分成1000个对象的类别,如键盘,鼠标,铅笔,和许多动物。

网= googlenet;

发现网络的输入大小和类标签。

inputSize = net.Layers (1) .InputSize (1:2);类= net.Layers . class(结束);

图像的分类

负载测试图像包含一个金毛猎犬的照片。

img = imread (“sherlock.jpg”);img = imresize (img, inputSize);图imshow (img)

使用pretrained网络分类的图像。

[YPred,分数]=(净,img)进行分类;YPred
YPred =分类金毛猎犬

网络的正确分类的金毛寻回犬的形象。找到得分最高的三个类。

[~,topIdx] = maxk(分数,3);topScores =分数(topIdx) ';topClasses =类(topIdx);表(topClasses topScores)
ans =3×2表0.55419 topClasses topScores _____________ _____的金毛寻回犬拉布拉多寻回犬0.39633白警犬0.02544

前三名的类分数都是狗。类的网络输出更高的分数与真正的金毛猎犬类分享相似的特征。

您可以使用可视化技术来理解为什么网络分类图片的金毛猎犬。

激活可视化

理解网络行为的最简单的方法之一是可视化每一层的激活。大多数卷积神经网络学习检测特性,比如颜色和边缘在第一卷积层。在更深的卷积层、网络学习检测更复杂的功能,比如眼睛。通过图像通过网络和检查输出的激活conv2-relu_3x3_reduce层。

行动=激活(img,净“conv2-relu_3x3_reduce”);深圳=大小(act);行动=重塑(行动,(深圳(1)深圳(2)1深圳(3)]);

显示激活第一个12层的通道。

我= imtile (mat2gray (act (:,:,: 1:12)));图imshow(我)

白色像素代表强阳性激活和黑色像素代表强烈的负激活。你可以看到,网络学习低级特征,如边缘和纹理。第一个通道突显出眼睛和鼻子的狗,可能由于其独特的优势和颜色。

调查更深一层。

img actDeep =激活(净,“inception_5b-output”);深圳=大小(actDeep)
深圳=1×31024 7
actDeep =重塑(actDeep,深圳(1)深圳(2)1深圳(3)]);

这一层有1024个频道。每个通道都有一个形象。详细调查每一个图像是不切实际的。相反,您可以了解网络行为通过考虑通道与最强的激活。

[maxValue, maxValueIndex] = max (max (max (actDeep)));actDeepMax = actDeep (:,:,:, maxValueIndex);tiledlayout (“流”)nexttile imshow (img) nexttile imshow (imresize (mat2gray (actDeepMax) inputSize))

最强的激活渠道关注狗的头,表明这一层是挑出更复杂的功能。

进一步探索网络行为,您可以使用更复杂的可视化方法。

Grad-CAM

探索网络预测使用gradient-weighted类激活映射(Grad-CAM)。理解图像的哪个部分最重要的分类、Grad-CAM使用分类评分的梯度对卷积特性决定了网络。这个梯度大的地方是完全的地方最后得分大部分依赖于数据。计算Grad-CAM地图使用gradCAM功能和预测类。

gradcamMap = gradCAM(网,img, YPred);

默认情况下,gradCAM从去年ReLU层函数提取特征图谱与nonsingleton空间维度或最后一层收集ReLU层的输出(如深度连接或添加层)。早些时候你可以计算Grad-CAM地图层网络中通过指定功能层。计算卷积的早期的Grad-CAM映射层conv2-relu_3x3

YPred gradcamMapShallow = gradCAM(净,img,“FeatureLayer”,“conv2-relu_3x3”);

使用plotMaps金宝app支持函数,列出在这个例子中,比较Grad-CAM地图。

图α= 0.5;提出=“喷气机”;plotMaps (img gradcamMap gradcamMapShallow,“深层”,“浅层”、α提出)

Grad-CAM映射层的网络凸显了头部和耳朵的狗,这表明耳朵和眼睛的形状是重要的分类这只狗是金毛猎犬。Grad-CAM映射产生的早期层突出边缘的狗。这是因为早期层网络中学习简单的特性,比如颜色和边缘,而深层学习更复杂的功能,如耳朵或眼睛。

闭塞的敏感性

计算图像的闭塞的敏感性。闭塞的敏感性是一个简单的技术来测量网络灵敏度小扰动输入数据。这种方法扰乱小范围的输入,代之以一个阻塞面具,通常一个灰色的方框。面具在图像和概率评分的变化对于一个给定的类是测量。您可以使用这个方法来突出图像的哪个部分最重要的分类。您可以执行阻塞敏感性使用occlusionSensitivity

灵敏度计算闭塞地图的金毛寻回犬类。

occlusionMap = occlusionSensitivity(网,img, YPred);

检查的结果具有较高分辨率的阻塞,减少使用面具的大小和进步MaskSize选项。一个更小的价值收益率更高分辨率的地图,但需要更长的时间来计算,可以使用更多的内存。一个更小的MaskSize价值收益率更多细节,但会导致吵着结果。从闭塞的灵敏度得到最好的结果,你必须仔细地选择正确的值MaskSize选项。

YPred occlusionMapDetail = occlusionSensitivity(净,img,“步”10“MaskSize”15);

使用plotMaps函数来比较不同阻塞灵敏度结果。

plotMaps (img occlusionMap occlusionMapDetail,“闭塞敏感性”,“闭塞敏感性\换行符(高分辨率)”、α提出)

Grad-CAM低分辨率的地图显示了类似的结果,强调了狗的耳朵和眼睛。高分辨率的地图显示,耳朵是最重要的分类。高分辨率图也表明,皮毛的狗造成分类决策。

石灰

接下来,考虑本地可判断的model-agnostic解释(石灰)技术。石灰接近深神经网络的分类行为使用更简单,更可翻译的模式,如回归树。解释这个简单的决策模型提供了了解神经网络的决策。简单的模型是用来确定功能的输入数据的重要性,作为一个代理的重要性深层神经网络的特性。石灰技术使用一个非常不同的底层机制来阻塞或Grad-CAM的敏感性。

使用imageLIME功能视图中最重要的特性分类决策的网络。计算出石灰地图前两类:金毛猎犬和拉布拉多寻回犬。

limeMapClass1 = imageLIME(净、img topClasses (1));limeMapClass2 = imageLIME(净、img topClasses (2));titleClass1 =“石灰(”+ +字符串(topClasses (1))“)”;titleClass2 =“石灰(”+ +字符串(topClasses (2))“)”;plotMaps (img, limeMapClass1 limeMapClass2、titleClass1 titleClass2,α,提出)

的地图显示区域的图像分类是很重要的。红色区域的地图有更高的重要形象缺乏这些领域将有一个较低的分数为指定的类。金毛猎犬类,网络关注狗的头部和耳朵的预测。拉布拉多寻回犬类,网络更关注狗的鼻子和眼睛,而不是耳朵。虽然地图强调狗的额头,网络,狗的耳朵和颈部的金毛寻回犬类,而狗的眼睛表明拉布拉多寻回犬类。

闭塞的石灰地图是一致的敏感性和Grad-CAM地图。比较的结果不同的可解释性技术是重要的验证结论。

梯度归因

梯度归因方式生产出像素的分辨率的地图显示的像素是最重要的网络分类的决定。这些方法计算梯度类的分数对输入像素。直觉上,地图显示像素最影响类分数当改变。梯度归因方法产生一个更高的分辨率的地图比从Grad-CAM或闭塞敏感性,但这往往是噪声很大,作为一个训练有素的深层网络不是强烈依赖于特定像素的精确值。

使用gradientAttribution金宝app支持函数,列出在这个例子中,计算梯度归因地图的金毛寻回犬类。

softmaxName =“概率”;pixelMap = gradientAttribution(网,img, YPred softmaxName,“autodiff”);

你可以获得一个更清晰的梯度归因通过修改地图向后通过ReLU层这样的元素梯度小于零和元素的输入小于零的ReLU层都设置为0。这种方法被称为引导反向传播。计算梯度归因地图使用引导反向传播网络。

pixelGuidedBackpropMap = gradientAttribution(网,img, YPred softmaxName,“guided-backprop”);

使用自定义显示梯度归因地图colormap 255颜色映射的值0白色和1为黑色。较暗的像素对分类是最重要的。

α= 1;提出= [linspace (0255)“linspace (0255) linspace (0255)];plotMaps (img pixelMap pixelGuidedBackpropMap,“梯度归因”,“引导反向传播”、α提出)

最黑暗的部分地图是那些围绕着狗。地图上很嘈杂,但它确实表明,网络使用预期的信息在图像进行分类。狗有更多的像素对分类的影响分数比像素的背景。反向传播引导地图,像素是关注狗的脸,特别是眼睛和鼻子。有趣的是,这种方法强调不同区域比低分辨率可视化技术。结果表明,在像素级,狗的鼻子和眼睛是重要的分类图像的金毛猎犬。

深梦形象

深的梦想是一个特性可视化技术,创建图片强烈激活网络层。通过观察这些图片,可以突出图像特征通过网络学习。这些图片是有用的对于理解和诊断网络的行为。你可以通过可视化生成图像的特征层网络的末尾。与前面的方法不同,这种技术是全球的,向你展示了网络的整体行为,不仅是对一个特定的输入图像。

产生一个给定的类最相似的图像,使用最后的完全连接层loss3-classifier。生成深度图像的三大梦想类的网络预测测试图像。集“详细”抑制对优化过程的详细信息。

渠道= topIdx;learnableLayer =“loss3-classifier”;dreamImage = deepDreamImage(净、learnableLayer频道,“详细”、假);

增加金字塔的数量水平和迭代每级金字塔可以产生更多的额外费用的详细图像计算。生成详细深梦图像。

dreamImageDetailed = deepDreamImage(净、learnableLayer频道,“详细”假的,“NumIterations”,100,“PyramidLevels”4);

比较深的梦想前三名的图像类。

tiledlayout (2、3)i = 1:3 nexttile imshow (dreamImage(::,:,我));标题(string (topClasses (i)));结束i = 1:3 nexttile imshow (dreamImageDetailed(::,:,我));标题(string (topClasses(我))+“\换行(高分辨率)”);结束

深梦图片展示网络设想每个三个类。虽然这些图片很抽象,可以看到关键特性为每个类。它还表明,网络区分金和拉布拉多寻回犬类。

探索应用这些方法使用一个应用程序交互,看到探索深层网络Explainability使用应用程序GitHub®库。

金宝app支持功能

替代层功能

replaceLayersOfType函数替换所有层指定类的实例的一个新图层。新层相同的名称与原始层。

函数lgraph = replaceLayersOfType (lgraph layerType newLayer)%替代层layerGraph lgraph指定的类型% layerType newLayer副本的层。i = 1:长度(lgraph.Layers)如果isa (lgraph.Layers(我),layerType)%新旧层之间的名称相匹配。layerName = lgraph.Layers(我). name;newLayer。= layerName名称;lgraph = replaceLayer (lgraph layerName newLayer);结束结束结束

绘制地图

情节两个地图,map1map2输入图像img。使用α设置地图的透明度。指定使用哪个colormap使用提出

函数plotMaps (img, map1 map2、title1 title2,α,提出)图次要情节(1、3、1)imshow (img)次要情节(1、3、2)imshow (img)显示亮度图像(map1“AlphaData”α)colormap城市规划机构(cmap)标题(title1)次要情节(1、3、3)imshow (img)显示亮度图像(map2“AlphaData”α)colormap城市规划机构(cmap)标题(title2)结束

梯度归因地图

计算梯度归因地图。您必须指定将softmax层。你可以计算出基本地图,或者更高分辨率的地图使用引导反向传播。

函数地图= gradientAttribution(网,img, YPred、softmaxName方法)lgraph = layerGraph(净);lgraph = removeLayers (lgraph lgraph.Layers(结束). name);dlnet = dlnetwork (lgraph);%使用自动分化,将图像转换为dlarray。dlImg = dlarray(单(img),“SSC”);如果方法= =“autodiff”%使用dlfeval gradientMap函数计算导数。的gradientMap%函数将图像通过网络获取类的分数%,包含调用dlgradient评估分数的梯度与尊重%的形象。dydI = dlfeval (@gradientMap dlnet、dlImg softmaxName, YPred);结束如果方法= =“guided-backprop”%使用自定义层CustomBackpropReluLayer(附加作为支持文件)金宝app%与非标准向后传递,并使用自动分化。customRelu = CustomBackpropReluLayer ();%设置BackpropMode属性的每个CustomBackpropReluLayer“guided-backprop”。customRelu。BackpropMode =“guided-backprop”;%使用支持函数rep金宝applaceLayersOfType取代reluLayer在网络的所有实例% CustomBackpropReluLayer的实例。lgraphGB = replaceLayersOfType (lgraph,“nnet.cnn.layer.ReLULayer”,customRelu);%转换层图包含CustomBackpropReluLayers dlnetwork。dlnetGB = dlnetwork (lgraphGB);dydI = dlfeval (@gradientMap dlnetGB、dlImg softmaxName, YPred);结束%的绝对值总和每个像素沿着通道尺寸,然后重新调节%在0和1之间。地图=总和(abs (extractdata (dydI)), 3);地图=重新调节(地图);结束

渐变映射

计算梯度类的分数对一个或多个输入图像。

函数dydI = gradientMap (dlnet dlImgs、softmaxName classIdx) dydI = dlarray(0(大小(dlImgs)));i = 1:尺寸(dlImgs, 4) i = dlImgs(::,:,我);成绩=预测(dlnet,我,“输出”,{softmaxName});classScore =分数(classIdx);dydI(::,:,我)= dlgradient (classScore,我);结束结束

引用

[1],Bolei Aditya斯拉,Agata Lapedriza,这和安东尼·托拉尔巴制作。“学习深有识别力的本地化特征。”在2016年《IEEE计算机视觉与模式识别会议:2921 - 29。美国内华达州拉斯维加斯:IEEE 2016。https://doi.org/10.1109/CVPR.2016.319。

[2]Selvaraju, Ramprasaath R。,Michael Cogswell, Abhishek Das, Ramakrishna Vedantam, Devi Parikh, and Dhruv Batra. “Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization.” In2017年美国IEEE计算机视觉:618 - 626。意大利威尼斯:IEEE 2017。https://doi.org/10.1109/ICCV.2017.74。

[3]里贝罗,马可杜立欧,Sameer辛格,卡洛斯Guestrin。“我为什么要相信你?”:解释任何分类器的预测。“在22 ACM SIGKDD学报》国际会议上知识发现和数据挖掘(2016):1135 - 1144。纽约,纽约州:计算机协会,2016。https://doi.org/10.1145/2939672.2939778。

[4]Simonyan,凯伦,安德里亚·Vedaldi和安德鲁Zisserman。”深处卷积网络:想象图像分类模型和卓越的地图。2014年4月19日,“预印本,提交。https://arxiv.org/abs/1312.6034。

[5]TensorFlow。“DeepDreaming TensorFlow。”https://github.com/tensorflow/docs/blob/master/site/en/tutorials/generative/deepdream.ipynb。

另请参阅

||||(统计和机器学习的工具箱)

相关的话题