用matlab探索卷积神经网络(Convolutional Neural Networks)-3

5.GoogLeNet中的Filters

这里我们探索GoogLeNet中的Filters,首先你需要安装GoogLeNet.在Matlab的APPS里找到Deep Network Designer,然后找到GoogLeNet,安装后的网络是没有右下角的黄色感叹号的,没有安装的神经网络都有黄色感叹号。

一个层(layer)的 Weights 属性包含该层的权重。你可以使用点符号(dot notation)来访问层的属性:
layer.Prop。由于 GoogLeNet 是一个预训练网络,它已经学习到了可以提取有用特征的权重。这里,我们将GoogLeNet 的各层被保存在变量 ly 中。并将第二层的权重保存到一个名为 W 的变量中。

复制代码
% 加载网络
net = imagePretrainedNetwork("googlenet");

% 保存网络的各层到变量ly中
ly = net.Layers;

% 提取第二层
conv = ly(2);

% 提取第二层的权重,这里不加分号可以看到W的输出
W = conv.Weights

从W的输出可以看到网络第二层的权重(即第一个卷积层)是一个大小为 7×7×3×64 的数组。这意味着该层有 64 个不同的滤波器。每个滤波器的尺寸是 7×7×3,因此可以将它们看作是 RGB 图像。为了正确显示这些滤波器,必须对它们进行归一化处理。rescale 函数可以将权重值缩放到 0 到 1 之间。使用 montage 函数可以查看这些权重组成的数组。

复制代码
% 使用 montage 函数可以查看这些权重组成的数组
montage(rescale(W))

你可以通过索引访问权重数组中的特定滤波器。你需要提取某一个滤波器的所有行、列以及 RGB 通道的数据。这里我们从权重数组中提取第 11 个滤波器,然后将其显示出来。在使用 imshow 显示图像之前,应该使用 rescale 对图像进行归一化处理。

matlab 复制代码
% 提取第11个滤波器
filter_11 = W(:,:,:,11);

% 归一化并放大显示
figure,imshow(rescale(filter_11),"InitialMagnification", 1000)

第11个滤波器似乎在寻找粉红色 。我们加载一个图像 roses.jpg ,这个图片中包含一些植物,但只有玫瑰是红色的,这意味着只有玫瑰会被第11个滤波器正向激活。

你可以通过使用 minibatchpredict 函数来测试这一点,并结合参数 Outputs 获取卷积层的输出:

复制代码
features = minibatchpredict(net, img, Outputs="layer")

这里,我们从网络 net 中获取图像 im 在层 "conv1-7x7_s2" 的激活值,并将输出命名为 actvn

复制代码
% 加载图片
im = imread("roses.jpg");

% 获取图像在第一个卷积层的输出
actvn = minibatchpredict(net, im, Outputs="conv1-7x7_s2");

激活值的尺寸为 m×n×64 。也就是说,第一层卷积中的每个滤波器都会产生一个激活图(或称为特征图)。如果你想研究第11个滤波器的效果,需要提取第11个通道的激活值。对这个矩阵使用 rescale 进行归一化,然后使用 imshow 将其显示出来。

复制代码
figure,imshow(rescale(actvn(:,:,11)))

正如预期的那样,红色的玫瑰被强烈激活了。你可以使用这些步骤来研究 montage 中显示的任何一个滤波器。

相关推荐
亓才孓1 分钟前
[Class的应用]获取类的信息
java·开发语言
开开心心就好9 分钟前
AI人声伴奏分离工具,离线提取伴奏K歌用
java·linux·开发语言·网络·人工智能·电脑·blender
Never_Satisfied13 分钟前
在JavaScript / HTML中,关于querySelectorAll方法
开发语言·javascript·html
3GPP仿真实验室37 分钟前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
devmoon41 分钟前
在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
开发语言·安全·区块链·polkadot·erc-20·测试网·独立链
lili-felicity41 分钟前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
沐知全栈开发42 分钟前
CSS3 边框:全面解析与实战技巧
开发语言
island13141 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
曹牧1 小时前
Spring Boot:如何在Java Controller中处理POST请求?
java·开发语言
浅念-1 小时前
C++入门(2)
开发语言·c++·经验分享·笔记·学习