飞道的博客

matlab_深度学习

229人阅读  评论(0)

Matlab神经网络——卷积神经网络

本案例目的是使用在matlab中使用AlexNet,并对人脸图片进行一定的卷积操作以及可视化


可视化卷积神经网络的特征图

1.导入网络和数据

需要安装Deep Learning ToolBox model for AlexNet Network 支持包
如果没有装直接运行会给出下载安装的链接

net=alexnet;

导入一张图像来提取特征

im=imread('C:\Users\Administrator\Desktop\blogs\matlab_alexnet\face.jpg');
imshow(im);
imgSize=size(im);
imgSize=imgSize(1:2);

2.网络结构

8层的卷积神经网络:5个卷积层,3个全连接层
输入图像的大小:6325003
imageNet数据:1000中类别

net.Layers
ans = 
  具有以下层的 25×1 Layer 数组:

     1   'data'     图像输入      227×227×3 图像: 'zerocenter' 归一化
     2   'conv1'    卷积         96 11×11×3 卷积: 步幅 [4  4],填充 [0  0  0  0]
     3   'relu1'    ReLU         ReLU
     4   'norm1'    跨通道归一化   跨通道归一化: 每元素 5 个通道
     5   'pool1'    最大池化      3×3 最大池化: 步幅 [2  2],填充 [0  0  0  0]
     6   'conv2'    分组卷积      2 groups of 128 5×5×48 卷积: 步幅 [1  1],填充 [2  2  2  2]
     7   'relu2'    ReLU         ReLU
     8   'norm2'    跨通道归一化   跨通道归一化: 每元素 5 个通道
     9   'pool2'    最大池化      3×3 最大池化: 步幅 [2  2],填充 [0  0  0  0]
    10   'conv3'    卷积         384 3×3×256 卷积: 步幅 [1  1],填充 [1  1  1  1]
    11   'relu3'    ReLU         ReLU
    12   'conv4'    分组卷积      2 groups of 192 3×3×192 卷积: 步幅 [1  1],填充 [1  1  1  1]
    13   'relu4'    ReLU         ReLU
    14   'conv5'    分组卷积      2 groups of 128 3×3×192 卷积: 步幅 [1  1],填充 [1  1  1  1]
    15   'relu5'    ReLU         ReLU
    16   'pool5'    最大池化      3×3 最大池化: 步幅 [2  2],填充 [0  0  0  0]
    17   'fc6'      全连接        4096 全连接层
    18   'relu6'    ReLU         ReLU
    19   'drop6'    丢弃         50% 丢弃
    20   'fc7'      全连接        4096 全连接层
    21   'relu7'    ReLU         ReLU
    22   'drop7'    丢弃         50% 丢弃
    23   'fc8'      全连接        1000 全连接层
    24   'prob'     Softmax      softmax
    25   'output'   分类输出      crossentropyex: 具有 'tench'999 个其他类

3.第一层卷积得到的结果

卷积层由许多2-D数组组成,每个数组代表不同的卷积核,也叫滤波器。
将图像传进网络,查看第一个卷积层conv1的输出特征图。
conv1有96个卷积核,输出的特征图有96个通道,每个通道可以可视化成一张灰度图。

act1=activations(net,im,'conv1');
sz=size(act1);
act1=reshape(act1,[sz(1) sz(2) 1 sz(3)]);
I=imtile(mat2gray(act1),'GridSize',[8,12]);%imtile将多个图像帧合并为一个矩形分块图
imshow(I)

4.特定通道上的结果

提取第85个通道上的激活值,resize成原始图像的大小

act1ch32=act1(:,:,:,85);
%try 85 to see edge;
%Compare to the origin image and notice that this activates on edges.
%it activates positively on light left/dark edges,and negatively on dark
%left/light right edges.
act1ch32=mat2gray(act1ch32);% mat2gray功能是实现图像矩阵的归一化操作
act1ch32=imresize(act1ch32,imgSize);
I=imtile({
   im,act1ch32});
imshow(I)


因为是grayscale灰度图,越亮的地方对应的像素值越高,越暗越低
所以85通道“寻找”的是边缘的特征


转载:https://blog.csdn.net/weixin_42813521/article/details/116494852
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场