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

相关推荐
乌暮44 分钟前
综合案例:宠物电商系统
java·开发语言·spring·mvc·restful·1024程序员节
大文说跨境44 分钟前
亚马逊多店铺的图片素材怎么批量去重:EXIF 与哈希的处理流程
开发语言·php
大风起兮云飞扬丶2 小时前
Java——枚举
java·开发语言
小灰灰搞电子2 小时前
Rust+Slint 实现高级动态消息提示框源码分享
开发语言·rust
Dev _2 小时前
Python解释器安装在系统级目录导致命令行用户‌没有权限‌向该目录写入文件
开发语言·python
qq_406981033 小时前
大白话rust系列08 当变量遮蔽遇上引用,探究变量遮蔽的本质
开发语言·后端·rust
喵了几个咪3 小时前
GoWind ShortPlay 拆解:不用模型的推荐闭环——埋点回流、三路召回与已看去重
开发语言·后端·微服务·golang·gowind
谙弆悕博士3 小时前
用 C 写了个 Windows 聊天室,踩了几个多线程和控制台的坑
c语言·开发语言·c++·windows·网络编程·聊天室
Canmag 兴隆磁性3 小时前
回复磁导率 μ_R:永磁体在动态磁路中的关键参数
开发语言·学习·r语言·永磁材料·充磁·磁导率
CRMEB系统商城3 小时前
鲜花零售的预售与积分营销
开发语言·人工智能·科技·小程序·零售