这个例子展示了如何将卷积神经网络学习到的特征可视化。
卷积神经网络使用特性对图像进行分类。网络在训练过程中自己学习这些特征。网络在训练中学习的东西有时是不清楚的。但是,你可以使用deepDreamImage
功能来可视化学习的特征。
的卷积各层输出一个3D激活体,其中沿第三维的切片对应于应用于层输入的单个过滤器。输出通道为完全连接网络末端的层对应于早期层学到的特性的高级组合。
你可以通过使用来形象化学习到的特征deepDreamImage
生成强烈激活网络层特定通道的图像。
该示例需要深度学习工具箱™和深度学习工具箱模型GoogLeNet网络金宝app支持包。
加载一个预先训练好的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设备。金宝app有关支持的设备的信息,请参见金宝appGPU支金宝app持情况(并行计算工具箱).
渠道= 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 ||==============================================|
figure I = imtile(n .)“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);figure I = imtile(n .)“ThumbnailSize”64年[64]);imshow(I) name = net.Layers(layer).Name;标题([“层”、名称、“特性”],“翻译”,“没有”)
这一层的过滤器检测比第一层卷积层更复杂的模式。
更深层次学习较早层次学到的高级特征组合。
增加金字塔层的数量和每个金字塔层的迭代可以产生更详细的图像,但需要额外的计算。属性可以增加迭代次数“NumIterations”
选择,并使用“PyramidLevels
”选项。
层= 97;name = net.Layers(层). name
name = ' inception_4e-1x1 '
渠道= 1:6;我= deepDreamImage(净、名称、通道...“详细”假的,...“NumIterations”, 20岁,...“PyramidLevels”2);figure I = imtile(n .)“ThumbnailSize”250年[250]);imshow(I) name = net.Layers(layer).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);figure I = imtile(n .)“ThumbnailSize”250年[250]);imshow(I) name = net.Layers(layer).Name;标题([“层”、名称、“特性”])
生成的图像强烈激活所选的类。为“斑马”类生成的图像包含明显的斑马条纹,而为“城堡”类生成的图像包含炮塔和窗户。
googlenet
|deepDreamImage
|occlusionSensitivity
|gradCAM
|imageLIME