卷积神经网络的可视化特征
这个例子展示了如何将卷积神经网络学习到的特征可视化。
卷积神经网络的使用特性分类图像。网络在训练过程中自己学习这些特征。网络在训练中学到的东西有时是不清楚的。但是,您可以使用deepDreamImage
函数来可视化学习到的特征。
的卷积层输出一个3D激活体,其中沿第三维的切片对应于应用于层输入的单个过滤器。输出的通道为完全连接网络末端的层对应于早期层学习到的特征的高级组合。
您可以通过使用来可视化学习到的特征deepDreamImage
生成强烈激活网络层特定通道的图像。
该示例需要深度学习工具箱™和深度学习工具箱模型为GoogLeNet网络支持包。
负荷预训练网络
加载一个预先训练好的GoogLeNet网络。
Net = googlenet;
可视化早期卷积层
在GoogLeNet网络中有多个卷积层。朝向网络开始的卷积层具有较小的接受域大小,并学习较小的低级特征。网络末端的层具有更大的接受域大小,并学习更大的特征。
使用analyzeNetwork
,查看网络架构并定位卷积层。
analyzeNetwork(净)
卷积层1的特性
集层
作为第一个卷积层。这一层是网络中的第二层,命名为“conv1-7x7_s2”
.
图层= 2;name = net.Layers(layer).Name
Name = 'conv1-7x7_s2'
可视化该层学习的前36个特征deepDreamImage
通过设置渠道
是指标的向量1:36
.集“PyramidLevels”
到1,这样图像就不会缩放。若要一起显示图像,可以使用imtile
.
deepDreamImage
默认情况下,如果可用,使用兼容的GPU。否则它会占用CPU。使用GPU需要并行计算工具箱™和受支持的GPU设备。有关受支持设备的信息,请参见GPU计算要求(并行计算工具箱).
通道= 1:36;I = deepDreamImage(net,name,channels,...“PyramidLevels”1);
|==============================================| | 迭代| |金字塔激活水平| | |力量 | | |==============================================| | 1 | 0.26 | 1 | | 2 | 6.99 | 1 | | 3 | 14.24 | 1 | | 4 | 21.49 | 1 | | 5 | 28.74 | 1 | | 6 | 35.99 | 1 | | 7 | 43.24 | 1 | | 8 | 50.50 | 1 | | 9 | 57.75 | 1 | | 10 | 65.00 | 1 | |==============================================|
图I = imtile(I,“ThumbnailSize”64年[64]);imshow (I)标题([“层”、名称、“特性”),“翻译”,“没有”)
这些图像大多包含边缘和颜色,这表明滤镜在层“conv1-7x7_s2”
是边缘检测器和颜色过滤器。
Convolutional Layer 2的特性
第二个卷积层被命名“conv2-3x3_reduce”
,对应第6层。通过设置来可视化该层学习的前36个特征渠道
是指标的向量1:36
.
若要抑制优化过程的详细输出,请设置“详细”
来“假”
在对deepDreamImage。
层数= 6;name = net.Layers(layer).Name
Name = 'conv2-3x3_reduce'
通道= 1:36;I = deepDreamImage(net,name,channels,...“详细”假的,...“PyramidLevels”1);图I = imtile(I,“ThumbnailSize”64年[64]);imshow(I) name = net.Layers(layer).Name;标题([“层”、名称、“特性”),“翻译”,“没有”)
这一层的过滤器比第一个卷积层检测到更复杂的模式。
可视化更深层的卷积层
较深的层学习较早的层学习到的特征的高级组合。
增加金字塔层的数量和每个金字塔层的迭代次数可以以额外的计算为代价生成更详细的图像。方法可以增加迭代次数“NumIterations”
选项,并增加金字塔的级别使用'PyramidLevels
”选项。
层数= 97;name = net.Layers(layer).Name
Name = 'inception_4e-1x1'
渠道= 1:6;I = deepDreamImage(net,name,channels,...“详细”假的,...“NumIterations”, 20岁,...“PyramidLevels”2);图I = imtile(I,“ThumbnailSize”250年[250]);imshow(I) name = net.Layers(layer).Name;标题([“层”、名称、“特性”),“翻译”,“没有”)
请注意,越深入网络的层会产生更详细的过滤器,这些过滤器已经学习了复杂的模式和纹理。
可视化全连接层
为了生成与每个类最相似的图像,选择全连接层,并设置渠道
作为类的索引。
选择全连接层(层142)。
层数= 142;name = net.Layers(layer).Name
Name = 'loss3-classifier'
通过设置选择要可视化的类渠道
为这些类名的索引。
频道= [114 293 341 484 563 950];
类存储在类
输出层(最后一层)的属性。中的项,可以查看所选类的名称渠道
.
net.Layers(结束). class(渠道)
ans =6×1分类蜗牛老虎斑马城堡喷泉草莓
生成强烈激活这些类的详细映像。集“NumIterations”
到100的调用到deepDreamImage
以产生更详细的图像。从全连接层生成的图像对应于图像类。
I = deepDreamImage(net,name,channels,...“详细”假的,...“NumIterations”, 100,...“PyramidLevels”2);图I = imtile(I,“ThumbnailSize”250年[250]);imshow(I) name = net.Layers(layer).Name;标题([“层”、名称、“特性”])
生成的图像强烈激活所选类。为“斑马”类生成的图像包含明显的斑马条纹,而为“城堡”类生成的图像包含炮塔和窗户。
另请参阅
googlenet
|deepDreamImage
|occlusionSensitivity
|gradCAM
|imageLIME