神经网络特性的可视化
可视化的数据和语义网络学习的内容
这篇文章来自玛丽亚Duarte罗莎,谁来讨论不同的方法学习的可视化功能网络。 今天,我们来看看两种方式来洞察网络使用两种方法:再邻居和t-SNE,我们将在下面详细描述。数据和模型
对于这两个练习,我们将使用ResNet-18数据集,我们最喜欢的食物,你可以在这里下载。(请注意这是一个非常大的下载。我们使用这个例子的目的,因为食物是有关!这段代码应该适用于任何其他数据集你希望)。网络已经重新训练确定5类对象的数据:沙拉 | 披萨 | 薯条 | 汉堡 | 寿司 |
再邻居搜索
最近邻搜索是一种优化问题的目标是找到最接近(或最相似)点在空间中给定的点。再邻居搜索标识高级k近邻特征空间中的一个点。亲密距离度量在度量空间的一般定义是使用如欧氏距离或闵可夫斯基距离。更多的相似点,这个距离应越小。这种技术通常用于机器学习分类方法,但也可以用于可视化数据和高级特性的神经网络,这是我们要做的。让我们从5开始测试图像从食品数据集:idxTest = (394 97 996 460 737);我= imtile(字符串({imdsTest.Files {idxTest}}),“ThumbnailSize”, (100 100),“GridSize”,[1] 5日);寻找最近的邻居10这些图像的像素空间的训练数据。下面的代码会(即的特性。“激活”)的所有测试图像,并找出哪些element-wise接近我们选择的样本图片。得到的特性,即激活
dataTrainFS =激活(netFood imdsTrainAu,‘数据’,‘OutputAs’,‘行’);imgFeatSpaceTest =激活(netFood imdsTestAu,‘数据’,‘OutputAs’,‘行’);dataTestFS = imgFeatSpaceTest (idxTest:);创建资讯模型和搜索最近的邻居
Mdl = createns (dataTrainFS,“距离”,“欧几里得”);idxKnn = knnsearch (Mdl dataTestFS,“k”, 10);寻找相似的像素空间一般不会返回任何有意义的信息对图像的语义内容只有相似的像素强度和颜色分布。10最近的邻居的数据(像素)空间不一定对应相同的类测试图像。没有“学习”。看看第四行: 薯条是黄色和亮的形象在顶部,底部和黑暗。最最近的邻居像素空间似乎任何类,其中包含相同的像素强度的图像和颜色模式(他们有些亮顶部和底部暗)。让我们来比较一下这和图像通过网络搜索最近的邻居在特征空间中,10的功能是输出的最终平均汇聚层网络,pool5。
dataTrainFS =激活(netFood imdsTrainAu,‘pool5’,‘OutputAs’,‘行’);imgFeatSpaceTest =激活(netFood imdsTestAu,‘pool5’,‘OutputAs’,‘行’);dataTestFS = imgFeatSpaceTest (idxTest:);创建资讯模型和搜索最近的邻居
Mdl = createns (dataTrainFS,“距离”,“欧几里得”);idxKnn (:,) = knnsearch (Mdl dataTestFS,“k”, 10);现在我们能看到的颜色和强度不再重要,而是更高层次的特征图像中的对象。最近的邻居现在同一个类的图像。这些结果表明,深层神经网络的特性包含图像的语义内容的信息。换句话说,网络通过学习学会区分类高层对象特定的功能类似于让人类区分汉堡包和披萨或凯撒沙拉寿司。
事例:我们可以从这里学到什么?
这可以证实我们期望看到的网络,或只是另一个可视化的网络以一种新的方式。如果网络的训练精度高但最近的邻居在特征空间(假设的功能是输出的最后一层网络)不是从同一个类对象,这可能说明网络没有捕获任何语义知识相关的类,但可能已经学会分类基于训练数据的一些工件。语义聚类与t-SNE
t-Distributed随机邻居嵌入(t-SNE)是一种非线性降维技术,允许嵌入低维空间的高维数据。(通常我们选择低维空间中两个或三个维度,因为这很容易情节和可视化)。这个低维空间估计在这样一种方式保存从高维空间的相似之处。换句话说,两个相似的物体附近的高概率在低维空间中,当两个不同的对象应该是由遥远的点。这种技术可用于可视化深层神经网络特性。让我们把这种技术应用到训练数据集的图像,得到一个二维和三维数据的嵌入。类似事例的示例中,我们将首先原始数据可视化(像素空间)和最终的输出平均池层。层={‘数据’,‘pool5 '};k = 1:长度(层)dataTrainFS =激活(netFood、imdsTrainAu层{k},“OutputAs”、“行”);AlltSNE2dim (:,:, k) = tsne (dataTrainFS);AlltSNE3dim (:,:, k) = tsne (dataTrainFS),“NumDimensions”, 3);图;次要情节(1、2、1);gscatter (AlltSNE2dim (:, 1, 1), AlltSNE2dim(:, 2, 1),标签);标题(sprintf(语义聚类- % s层,层{1}));次要情节(1、2、2);gscatter (AlltSNE2dim(:, 1日结束),AlltSNE2dim(:, 2,结束),标签);标题(sprintf(语义聚类- % s层,层{结束}));图; subplot(1,2,1);scatter3(AlltSNE3dim(:,1,1),AlltSNE3dim(:,2,1),AlltSNE3dim(:,3,1), 20*ones(3500,1), labels) title(sprintf('Semantic clustering - %s layer', layers{1})); subplot(1,2,2);scatter3(AlltSNE3dim(:,1,end),AlltSNE3dim(:,2,end),AlltSNE3dim(:,3,end), 20*ones(3500,1), labels) title(sprintf('Semantic clustering - %s layer', layers{end}));两个和三维图像,可以看到,数据分散在空间——在一个随机模式。但当我们把输出的嵌入“pool5”模式是非常不同的。现在我们可以清楚地看到集群点根据图像的语义内容。集群对应5个不同的类可用的数据。这意味着高层表示学习网络包含有识别力的图像中对象的信息,网络可以精确预测的类对象。除了这些可视化提供了关于网络的信息,他们也可以是有用的检查数据本身。例如,让我们想象一些图像,图像在错误的集群,看看我们是否能得到一些深入了解为什么网络miss-predicted输出。
图片错了语义聚类的例子
让我们仔细看看pool5的2 d图像层,和放大的一些分类错误的图像。我= imread (imdsTrain.Files {1619});图;imshow (im)、标题(“汉堡看起来像沙拉”);一个汉堡沙拉集群。不像其他汉堡的图片,照片中有大量的沙拉,没有面包/包。
我= imread (imdsTrain.Files {125});图;imshow (im)、标题(“停止沙拉看起来像一个汉堡”);。 在汉堡沙拉集群。这可能是因为背景图像包含一个包子或面包。
我= imread (imdsTrain.Files {3000});图;imshow (im)、标题(“寿司看起来像一个汉堡”);
也许是因为它有一些特性,看起来像是一个能找到一个汉堡吗? 最后,我认为这是有趣的t-SNE形象化的所有层网络中,我们可以看到数据开始随机点,并适当地慢慢成为集群。 您可以下载代码使用的小“MATLAB代码”下面的链接。你需要自己带pretrained网络和数据集,因为这是不包括在内。 希望你找到这些可视化有趣和有用的!有一个问题要问玛丽亚?请在下面留下你的评论!
版权2018年MathWorks公司。
得到了MATLAB代码
- 类别:
- 深度学习
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。