卷积神经网络的可视化特性
这个例子展示了如何可视化卷积神经网络学习的特性。
卷积神经网络使用特性对图像进行分类。网络学习训练过程中这些特性本身。什么是网络学习训练中有时不清楚。然而,您可以使用deepDreamImage
学习函数可视化特性。
的卷积层输出一个3 d的激活体积,沿三维切片对应一个输入滤波器应用于层。渠道产出完全连接层的网络对应的高层组合层早些时候学到的特性。
你可以想象什么样子的学习功能deepDreamImage
生成图片强烈激活特定频道的网络层。
例子需要深度学习工具箱™和深度学习工具箱模型GoogLeNet网络万博1manbetx支持包。
负载Pretrained网络
加载一个pretrained GoogLeNet网络。
网= googlenet;
可视化早期脑回的层
有多个GoogLeNet卷积层网络。卷积层对网络有一个小的开始接受域大小和学习小,低层次的特性。网络层末期有更大的接受域大小和学习更大的功能。
使用analyzeNetwork
查看网络体系结构和定位卷积层。
analyzeNetwork(净)
卷积图层1的功能
集层
第一个回旋的层。这一层是第二层网络和命名“conv1-7x7_s2”
。
层= 2;name = net.Layers(层). name
name = ' conv1-7x7_s2 '
想象第一个学会了通过这一层使用36特性deepDreamImage
通过设置渠道
的矢量指数1:36时
。集“PyramidLevels”
1,这样的图像缩放。一起来显示图像,您可以使用imtile
。
deepDreamImage
使用一个兼容的GPU,默认情况下,如果可用。否则它使用CPU。使用GPU需要并行计算工具箱™和支持GPU设备。万博1manbetx支持设备的信息,请参阅万博1manbetxGPU计算的需求(并行计算工具箱)。
渠道= 1:36时;我= deepDreamImage(净、名称、通道…“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 | | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |
图我= imtile (,“ThumbnailSize”64年[64]);imshow (I)标题([“层”、名称、“特性”),“翻译”,“没有”)
这些图片主要包含边缘和颜色,这表明过滤层“conv1-7x7_s2”
是边缘探测器和颜色过滤器。
功能卷积层2
第二个卷积层命名“conv2-3x3_reduce”
,它对应于层6。想象第一个学会了通过这一层设置36个特性渠道
的矢量指数1:36时
。
抑制详细输出优化过程,集“详细”
来“假”
在调用deepDreamImage。
层= 6;name = net.Layers(层). name
name = ' conv2-3x3_reduce '
渠道= 1:36时;我= deepDreamImage(净、名称、通道…“详细”假的,…“PyramidLevels”1);图我= imtile (,“ThumbnailSize”64年[64]);imshow (I) name = net.Layers(层). name;标题([“层”、名称、“特性”),“翻译”,“没有”)
过滤器这一层比第一次卷积层检测更为复杂的模式。
可视化更深的回旋的层
学的更深层学习高级的组合功能早期层。
增加金字塔的数量水平和迭代每级金字塔可以产生更多的额外费用的详细图像计算。你可以增加迭代使用的数量“NumIterations”
选择和增加金字塔的数量水平使用'PyramidLevels
”选项。
层= 97;name = net.Layers(层). name
name = ' inception_4e-1x1 '
渠道= 1:6;我= deepDreamImage(净、名称、通道…“详细”假的,…“NumIterations”,20岁,…“PyramidLevels”2);图我= imtile (,“ThumbnailSize”250年[250]);imshow (I) name = net.Layers(层). name;标题([“层”、名称、“特性”),“翻译”,“没有”)
注意到更深的层次网络带来更详细的过滤器已经学会了复杂的图案和纹理。
想象完全连接层
生产每个类最相似的图像,选择完全连接层,集渠道
类的指标。
选择完全连接层(142层)。
层= 142;name = net.Layers(层). name
name = ' loss3-classifier '
选择您想要的类可视化通过设置渠道
类名的指标。
渠道= (114 293 341 484 563 950);
中存储的类类
输出层的属性(最后一层)。您可以查看所选类的名称通过选择条目渠道
。
net.Layers(结束). class(渠道)
ans =6×1分类蜗牛虎斑城堡喷泉草莓
产生强烈激活这些类的详细图像。集“NumIterations”
到100年的调用deepDreamImage
产生更详细的图片。生成的图像从完全连接层对应于图像类。
我= deepDreamImage(净、名称、通道…“详细”假的,…“NumIterations”,100,…“PyramidLevels”2);图我= imtile (,“ThumbnailSize”250年[250]);imshow (I) name = net.Layers(层). name;标题([“层”、名称、“特性”])
图像生成的强烈激活选定的类。图像生成的“斑马”类包含明显的斑马条纹,同时图像生成的“城堡”类包含炮塔和窗户。
另请参阅
googlenet
|deepDreamImage
|occlusionSensitivity
|gradCAM
|imageLIME