可视化卷积神经网络的激活
这个例子展示了如何养活一个图像卷积神经网络的激活和显示不同的网络层。检查激活并发现哪些特性的网络学习通过比较地区激活与原始图像。发现频道在早期层学习简单的功能,如颜色和边缘,而渠道更深层学习复杂的功能,如眼睛。以这种方式识别功能可以帮助您了解网络学习。
例子需要深度学习工具箱™和图像处理工具箱™。
负载Pretrained网络和数据
加载一个pretrained SqueezeNet网络。
网= squeezenet;
读取和显示一个图像。拯救它的大小,以供将来使用。
我= imread (“face.jpg”);imshow (im)
imgSize =大小(im);imgSize = imgSize (1:2);
查看网络体系结构
分析网络看到这层你可以看看。卷积层执行运算可学的参数。网络学习识别有用的特性,通常每通道的一个特性。观察到第一个卷积层有64个频道。
analyzeNetwork(净)
图像输入层指定输入的大小。您可以调整图像通过网络在传递之前,但网络也可以处理较大的图像。如果你喂网络较大的图像,激活也变得更大。然而,由于网络的训练图像大小227 -,- 227,它不是训练识别对象或功能比大小。
显示激活的脑回的层
调查功能通过观察卷积层激活区域的图像和原始图像与相应的区域。每一层的卷积神经网络由许多二维数组渠道。通过图像通过网络和检查输出的激活conv1
层。
act1 =激活(网,即时通讯,“conv1”);
激活是作为一个三维数组,返回与第三维度的索引上的通道conv1
层。展示这些激活使用imtile
功能、重塑四维的数组。第三维的输入imtile
代表了图像的颜色。设置三维尺寸1,因为激活没有颜色。第四维度的索引通道。
深圳=大小(act1);act1 =重塑(act1,深圳(1)深圳(2)1深圳(3)]);
现在你可以显示激活。每个激活可以采取任何价值,所以正常使用的输出mat2gray
。所有激活扩展的最小激活是0,最大值为1。8-by-8网格显示64张图片,每个通道的一个层。
我= imtile (mat2gray (act1),“GridSize”[8]);imshow(我)
调查的激活特定的渠道
网格中的每个瓦片的激活是一个通道的输出conv1
层。白色像素代表强阳性激活和黑色像素代表强烈的负激活。通道主要是灰色不激活强烈在输入图像。一个像素的位置在一个通道的激活对应于原始图像中相同的位置。白色像素在某个位置的通道表明通道强烈激活在那个位置。
调整频道22中的激活与原始图像相同大小和显示激活。
act1ch22 = act1 (:,:,: 22);act1ch22 = mat2gray (act1ch22);act1ch22 = imresize (act1ch22 imgSize);I = imtile ({im, act1ch22});imshow(我)
您可以看到,这个通道激活红色像素,因为白像素通道对应于原始图像的红色区域。
发现最强的激活通道
你也可以试着找到有趣的频道通过编程方式调查渠道激活。找到最大的通道激活使用马克斯
功能、调整和显示激活。
[maxValue, maxValueIndex] = max (max (max (act1)));act1chMax = act1 (:,:,:, maxValueIndex);act1chMax = mat2gray (act1chMax);act1chMax = imresize (act1chMax imgSize);I = imtile ({im, act1chMax});imshow(我)
与原始图像边缘和注意,这个通道激活。激活在光线黑暗左/右边,积极和消极的光在黑暗的左/右边。
调查更深一层
大多数卷积神经网络学习检测功能,如颜色和边缘在第一卷积层。在更深的卷积层、网络学习检测更复杂的功能。后来层建立初层的特性相结合的特性。调查fire6-squeeze1x1
层一样conv1
层。计算、重塑和显示在网格中激活。
act6 =激活(网,即时通讯,“fire6-squeeze1x1”);深圳=大小(act6);act6 =重塑(act6,深圳(1)深圳(2)1深圳(3)]);I = imtile (imresize (mat2gray (act6), 64 [64]),“GridSize”8 [6]);imshow(我)
有太多的图片详细调查,所以关注一些更有趣的。显示最强的激活fire6-squeeze1x1
层。
[maxValue6, maxValueIndex6] = max (max (max (act6)));act6chMax = act6 (:,:,:, maxValueIndex6);imshow (imresize (mat2gray (act6chMax) imgSize))
在这种情况下,最大限度的激活通道不像其他一些有趣的详细功能,并展示了强烈的负面(深色)以及积极的(光)激活。这个通道可能是专注于脸。
在网格中所有的渠道,有渠道可能会被激活的眼睛。进一步调查频道14和47。
I = imtile (imresize (mat2gray (act6 (:,:,:, 47 [14])), imgSize));imshow(我)
许多频道包含激活区域,都是光明与黑暗。这些都是积极的和消极的激活,分别。然而,只有积极激活使用,因为修正线性单元(ReLU)fire6-squeeze1x1
层。调查只有积极的激活,重复分析可视化的激活fire6-relu_squeeze1x1
层。
act6relu =激活(网,即时通讯,“fire6-relu_squeeze1x1”);深圳=大小(act6relu);act6relu =重塑(act6relu,深圳(1)深圳(2)1深圳(3)]);I = imtile (imresize (mat2gray (act6relu (:,:,:, 47 [14])), imgSize));imshow(我)
而激活的fire6-squeeze1x1
层的激活fire6-relu_squeeze1x1
层清楚地确定图像的区域,有强壮的面部特征。
测试通道是否认识到眼睛
检查是否频道14和47fire6-relu_squeeze1x1
层激活的眼睛。输入一个新形象有一个封闭的眼睛到网络和比较结果与原始图像的激活激活。
读取和显示图像和一个封闭的眼睛和计算的激活fire6-relu_squeeze1x1
层。
imClosed = imread (“face-eye-closed.jpg”);imshow (imClosed)
imClosed act6Closed =激活(净,“fire6-relu_squeeze1x1”);深圳=大小(act6Closed);act6Closed =重塑(act6Closed,深圳(1),深圳(2),1,深圳(3)));
在一个图绘制图像和激活。
channelsClosed = repmat (imresize (mat2gray (act6Closed (:,:,:, 47 [14])), imgSize), [1 1 3]);channelsOpen = repmat (imresize (mat2gray (act6relu (:,:,:, 47 [14])), imgSize), [1 1 3]);I = imtile(猫(4 im channelsOpen * 255、imClosed channelsClosed * 255));imshow (I)标题(输入图像,通道14日通道47的);
你可以看到从激活通道14和47个激活个人的眼睛,在某种程度上也在嘴巴周围地区。
网络从来没有被告知要了解的眼睛,但却知道眼睛是一个有用的功能区分类别的图像。以前的机器学习方法经常手动设计特性的问题,但这些深卷积网络可以学习有用的特性。例如,学会识别眼睛可以帮助网络区分豹和豹纹地毯。