用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 中显示的任何一个滤波器。

相关推荐
xu_yule4 分钟前
Linux_14(多线程)线程控制+C++多线程
java·开发语言·jvm
c***97989 分钟前
PHP在内容管理中的模板引擎
开发语言·php
San30.16 分钟前
深入理解 JavaScript 异步编程:从 Ajax 到 Promise
开发语言·javascript·ajax·promise
XIAOYU67201318 分钟前
2026大专跨境电商专业,想好就业考哪些证书比较好?
开发语言
2301_764441331 小时前
Python构建输入法应用
开发语言·python·算法
咨询QQ276998851 小时前
V-REP小车项目+匹配文档,基于V-REP与MATLAB联合仿真,小车能够完成循迹、避障、走...
开发语言
咩图1 小时前
C#创建AI项目
开发语言·人工智能·c#
豆沙沙包?1 小时前
2025年--Lc293-784. 字母大小写全排列(回溯)--java版
java·开发语言
珑墨2 小时前
【唯一随机数】如何用JavaScript的Set生成唯一的随机数?
开发语言·前端·javascript·ecmascript