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

相关推荐
zhanghaha13144 分钟前
Python进阶教程:28_queue 队列模块 零基础超详细教程
java·开发语言·python
司小豆9 分钟前
第七课:DeepSeek Harness 服务与依赖注入
java·服务器·开发语言·github·ai编程
weixin1997010801621 分钟前
[特殊字符]《闲鱼 + 淘宝 + 1688 三平台库存同源:二手ERP主数据治理与超卖防御》(附Python源码)
开发语言·python
ltqshs26 分钟前
C语言-链表例程
c语言·开发语言·链表
shmily麻瓜小菜鸡31 分钟前
JavaScript / TypeScript 易踩坑知识点 —— 作用域与变量类
开发语言·javascript·typescript
YYYing.34 分钟前
【C++进阶系列 (一)】关于线程堆栈的那些事 (上篇)
c语言·开发语言·c++·线程堆栈
zh731435 分钟前
Go 1.23 → 1.26 升级检查文档
开发语言·chrome·golang
CRMEB系统商城36 分钟前
汽车养护连锁的数字化底座CRMEB 多门店系统实战方案
java·开发语言·小程序·开源·汽车
努力努力再努力wz43 分钟前
【Redis入门系列】:从 RESP 协议到 redis-plus-plus:Redis 客户端编程与 C++ 接口设计
开发语言·数据库·c++·redis·分布式·缓存·架构
后台模板学习1 小时前
Rust vs Python 在用户认证模块中的实现:底层
开发语言·python·rust