一探在Tensorflow中带有交互代码的神经网络的“内心”!

很长的一段时间,作者都想了解模型的内部的工作原理。在这篇文章中,会涵盖三个主题,权重分布直方图、可视化神经元激活函数、积分梯度。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

数据集/网络架构/精度/分类号

一探在Tensorflow中带有交互代码的神经网络的“内心”!

一探在Tensorflow中带有交互代码的神经网络的“内心”!

红色矩形→输入图像(32 * 32 * 3)

黑色矩形→带ELU()的卷积有/没有平均池化

橙色长方形→Softmax分类

像往常一样,我们将使用CIFAR 10数据集来训练我们的所有卷积网络,并试图了解为什么网络已经将特定图像预测到它的类中。

还有一点需要注意,因为这篇文章更多的是了解网络的内部运作。我只打算使用测试集中的50幅图像来测量精度。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

一探在Tensorflow中带有交互代码的神经网络的“内心”!

左图→测试图像的精准度/成本会随时间变化有不同(50幅图像)

正确的图像→训练图像的准确性/成本随着时间的推移有所变化(50000图像)

一探在Tensorflow中带有交互代码的神经网络的“内心”!

如上所示,该模型在7个时期的最终准确率为81%。最后,让我们看看每个班级的每个数字分别代表什么。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

权重分布直方图(训练前后)

一探在Tensorflow中带有交互代码的神经网络的“内心”!

以上图像是每个图层的权重分布直方图,为了便于可视化,会将每个直方图分为三层。在最左侧,我们可以观察到权重通常具有0的平均值和0.04至0.06的标准偏差(stddev)值。这是预料之中的,因为我们用不同的stddev值声明每个图层。另外一些曲线比其他曲线更小的原因是每层权重不同。 (例如,第0层仅具有3 * 3 * 128权重,而第2层具有3 * 128 * 128权重)。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

不同的stddev值

网络的测试输入马上,我们就可以观察到明显的差异。特别是前三层,分布的范围从-5增加到5。但是,似乎大多数权重存在于-1和1之间(或接近零)。对于第4层到第6层,似乎平均值已经转移为以及最后三层。

可视化某些图层的激活值

一探在Tensorflow中带有交互代码的神经网络的“内心”!

网络的测试输入

使用Yosinski和他的同事们所做的技术,让我们想象如何在第3层、第6层和第9层之后修改上面的图像。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

在第3层之后激活

绿框→绿色值被捕获的通道

Blue Box→蓝色值被捕获的通道

现在有128个频道,所以我不会将它们全部形象化。相反,我会看到上面看到的前27个频道。我们可以看到,在第3层之后,某些颜色值在网络中被捕获。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

激活第6层

红框→捕获红色的通道

然而,在第六层之后,似乎某些过滤器能够比绿色或蓝色更好地捕获红色。在第9层之后激活

一探在Tensorflow中带有交互代码的神经网络的“内心”!

在第9层之后激活

最后,在第九层之后(就在全局平均汇集之前),我们可以用深度1来可视化每个通道(因此它看起来像是灰度图像)。然而(至少对我而言),它似乎不是人类可以理解的。所有图像都可以在这里找到,于是创建了一个GIF来累积所有的变化。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

GIF顺序→输入图像,第3层激活,第6层激活,第9层激活

内部梯度/正面和负面属性

一探在Tensorflow中带有交互代码的神经网络的“内心”!

alpha值为1.0

现在让我们使用内部梯度,alpha值为...。

0.01,0.01,0.03,0.04,0.1,0.5,0.6,0.7,0.8和1.0(与原始输入相同),以可视化网络的内部工作。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

一探在Tensorflow中带有交互代码的神经网络的“内心”!

一探在Tensorflow中带有交互代码的神经网络的“内心”!

上面的所有图像都表示不同alpha值的输入的梯度。我们可以观察到,由于网络中的饱和度、alpha值增加,梯度变得更接近于0(黑色)。当我们以gif格式查看所有图像时,我们可以清楚地看到梯度变化的差异。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

我们做一个有趣的观察,因为alpha值越来越小,所以网络无法做出正确的预测。如下图所示,当α值很小(0.01)时,网络预测大部分为3或4。(猫/鹿)

一探在Tensorflow中带有交互代码的神经网络的“内心”!

红框→模型预测

但随着alpha值的增加,最终达到1.0,我们可以观察到模型的准确性增加。最后,让我们看看每个alpha值的梯度的正面和负面属性。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

蓝色像素→正面属性与原始图像重叠

红色像素→与原始图像重叠的负面属性

一探在Tensorflow中带有交互代码的神经网络的“内心”!

一探在Tensorflow中带有交互代码的神经网络的“内心”!

一探在Tensorflow中带有交互代码的神经网络的“内心”!

再次,如果我们从图像中创建gif,则查看更改会更容易。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

积分梯度/积极和消极的属性

一探在Tensorflow中带有交互代码的神经网络的“内心”!

左图→梯形尺寸为3000的积分梯度用于逼近黎曼

正确的图像→正面属性为蓝色,负面属性为红色

最后,当我们使用积分梯度来可视化梯度时,我们可以观察到类似于上面的内容。我能够找到的一个非常有趣的事实是网络如何预测马(7),狗(5)和鹿(4)。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

让我们先看看原始图像,如左上图所示,中间图像是马,右图像是羊。

一探在Tensorflow中带有交互代码的神经网络的“内心”!

当我们看到积分梯度时,我们可以看到一些有趣的东西。正如在中间图片中看到的那样,网络认为马的头部是最重要的。然而,当只有头部时,网络认为这是一只狗的形象(它看起来像一只狗)。对于正确的形象类似的故事,当网络只考虑了羊的头部时,它预测为看到一只狗。

然而,正如在最左边的图像中看到的那样,当网络呈现马的整体形状(包括人的某个部分)时,它正确地将图像识别为马。

交互式代码

一探在Tensorflow中带有交互代码的神经网络的“内心”!

对于Google Colab,您需要一个Google帐户才能查看代码,并且您无法在Google Colab中运行只读脚本,因此请在游戏场地上制作副本。最后,我绝不会要求获得在Google云端硬盘上访问您的文件的权限,仅供参考。

要访问这篇文章的代码请点击这里(https://colab.research.google.com/drive/1ld8_40udZbnWALV1pU582JphXUZD-npn),训练日志点击这里(https://github.com/JaeDukSeo/Daily-Neural-Network-Practice-2/blob/master/Understanding_Concepts/COUNTERFACTUALS/viz/z_viz.txt)。

相关推荐