CNN:Convolutional Neural Network(下)
目录
1 CNN 学到的是什么
1.1 Convolution 中的参数
1.2 FFN 中的参数
1.3 Output
2 Deep Dream
3 Deep Style
4 More Application
4.1 AlphaGo
4.2 Speech
4.3 Text
原视频:李宏毅 2020:Convolutional Neural Network
本博客属于学习笔记,如有问题请大佬指正~
1 CNN 学到的是什么
我们可能会认为神经网络都是一个黑箱(black box),我们没有办法知道也没有办法解释其中的参数,只能知道训练出来的预测效果可能很好。但实际上,我们可以通过一些间接的方法来了解神经网络都学到了什么。
1.1 Convolution 中的参数
继续用上一篇博客的例子举例。假设我们通过梯度下降和反向传播,已经训练好了该 CNN 中的所有参数。在该 CNN 的第二个 Convolution 模块中,每个过滤器(filter)的输出均为一个 11×11 的矩阵(通道数是 25):

我们用以下符号来表示结果矩阵中的每一个值:
其中,k 表示这是第 k 个过滤器(filter)的输出,i 和 j 分别表示该结果所属的行和列。
为了知道这个训练好的 CNN 到底学到的是什么?我们的逻辑是,固定该 CNN 中某个过滤器(filter)的所有参数,寻找一个输入使得它的输出最大。这样我们便能知道哪些图片和该过滤器(filter)最匹配。这和训练模型时的逻辑正好相反。因为在训练模型时,我们是固定模型的输入,通过更新模型中的参数来使模型的输出最大。
“输出最大” 要具体情况具体分析,也可能是使损失函数最小。
因此,可以定义如下公式来衡量过滤器(filter)的激活程度(degree of the activation):
我们想要找到这样一个输入:
它能使过滤器(filter)的激活程度最大。事实上,根据所定义的公式,就是找一个和过滤器(filter)的点积结果最大的输入。再将这个输入以图片的形式表示出来:

这是李宏毅老师截取的前 12 个结果(我们所寻找的输入),它分别对应了 12 个过滤器(filter)所代表和寻找的样式(pattern)。这是因为向量点积结果越大表示两个向量越相似,所以通过观察这些寻找到的输入,我们能间接知道过滤器(filter)所代表和寻找的是哪一种图片样式(pattern)。
比如,第 7 个结果代表了第 7 个过滤器(filter)的工作是寻找图片中的斜纹样式(pattern),这就是该 CNN 的学习成果。
1.2 FFN 中的参数
根据 1.1 节中的逻辑,我们同样可以固定 FFN 中某个神经元的所有参数,通过使该神经元加权和最大来寻找适配该神经元的图片:

我们定义某神经元中的加权和为:
想要找到这样一个输入:
它能使该神经元的加权和最大。结果如下:

每一张小图均对应了某一个神经元所适配的图片。
1.3 Output
甚至我们还能控制输出层(output layer)的参数,了解该 CNN 眼中的结果长啥样。

假设这里模型处理的是一个数字辨识的分类问题,输出层(output layer)的结果表明输入的图片属于 0-9 这 10 个数字中的哪一个。
现在我们有一个训练好了的 CNN 模型,来看看它眼中的数字长啥样。我们定义输出层中某一神经元的加权和为:
它代表的是输入的图片属于哪一个数字。想要找到这样一个输入:
由于找到的这张图片在某一数字类别得到了最高分,因此可以认为它就代表了模型眼中某某数字的样子。结果如下:

由此可见,模型学习到的知识和我们人类学习到的知识天差地别。但是,我们也可以添加一些约束,类似于先验知识,来告诉模型什么样的东西才是数字。比如,在一个数字图片中,数字只会占据部分区域。因此,添加约束:
其中,x_ij 表示图片中第 i 行第 j 列的像素值(由于是黑白图片,所以只会取值 0 或 1)。公式表明,x_ij=1 是一个扣分项。也就是说,我们希望模型用尽量少的黑或白像素点来表示一个数字,从而实现了 “数字只会占据部分区域” 的约束。结果如右图所示:

添加约束后,我们似乎能看出一些数字的轮廓了。当然添加的约束可以不仅限于这一种,还可以要求同色像素点之间要连续等。
2 Deep Dream
后面的内容主要是李宏毅老师讲的一些 CNN 的玩法。
比如这里扔一张原始图片进 CNN,将正的参数设置得更正,负的参数设置得更负,最后再生成一张修改后的图片:

这一节没太听懂,如有错误请指正!
3 Deep Style
第一个 CNN 用于提取图片的内容,它关注的是过滤器(filter)的卷积结果;第二个 CNN 用于提取图片的画风,它关注的是过滤器(filter)之间的相互关系(correlation):

要求第三个 CNN 既匹配第一个 CNN 的过滤器(filter)卷积结果,又要匹配第二个 CNN 的过滤器(filter)之间的相互关系(correlation),最后通过反推生成一张新的图片。
4 More Application
与其说是介绍 CNN 的应用领域,不如说是李宏毅老师告诫我们不要照搬 CNN,而要根据实际场景进行取舍。
4.1 AlphaGo
比如在围棋领域,我们就不能使用 CNN 的 ③ 号功能,即采样原始图片像素的子集以获得更小的图片。因为棋盘中每行每列的棋子都可能参与到一个棋局的形成,擅自去除一些行和列会影响到整盘棋。所以 AlphaGo 中没有使用 Max Pooling 模块:

4.2 Speech
在语音识别中,频谱(spectrogram)也能用 CNN 进行处理。在频谱(spectrogram)中,横轴是时间,纵轴是声音的频率,颜色是声音的能量:

这是李宏毅老师说 “你好” 的频谱,我们只会截取一段频谱(spectrogram)作为 CNN 的输入,即浅色蓝框中的部分。这是因为每个字只会持续一段时间,我们不需要关注整个时间上的频谱。
在处理这一段频谱(spectrogram)时,过滤器(filter)(深色蓝框)只会沿着频率(frequency)的方向移动。这样做的原因有两个:
① 过滤器(filter)沿着时间(time)移动没有太大的帮助。因为在实际应用中,CNN 后面往往会接 LSTM 等模型,这些模型能够提取时间(temporal)信息,所以没有必要再让 CNN 去提取时间(temporal)信息。
② CNN 中过滤器(filter)的本质就是捕捉图片中的一些样式(pattern),虽然男生和女生说 “你好” 的频谱可能长得非常不同,但是在频率方向上存在相同的样式(pattern)。因此,让过滤器(filter)沿着频率(frequency)方向移动很有帮助。
4.3 Text
同样地,在 NLP 领域,过滤器(filter)也只会顺着句子进行移动,而不会把词嵌入(word embedding)截断,进行一个左右横跳:

我猜,Speech 和 Text 的例子都属于是一维卷积,即过滤器(filter)只沿着一个方向进行移动,也就是我们常常在论文中看到的 Conv1D 。
相关文章:
CNN:Convolutional Neural Network(下)
目录 1 CNN 学到的是什么 1.1 Convolution 中的参数 1.2 FFN 中的参数 1.3 Output 2 Deep Dream 3 Deep Style 4 More Application 4.1 AlphaGo 4.2 Speech 4.3 Text 原视频:李宏毅 2020:Convolutional Neural Network 本博客属于学…...
FPGA时序分析与时序约束(四)——时序例外约束
目录 一、时序例外约束 1.1 为什么需要时序例外约束 1.2 时序例外约束分类 二、多周期约束 2.1 多周期约束语法 2.2 同频同相时钟的多周期约束 2.3 同频异相时钟的多周期约束 2.4 慢时钟域到快时钟域的多周期约束 2.5 快时钟域到慢时钟域的多周期约束 三、虚假路径约…...
无需任何三方库,在 Next.js 项目在线预览 PDF 文件
前言: 之前在使用Vue和其它框架的时候,预览 PDF 都是使用的 PDFObject 这个库,步骤是:下载依赖,然后手动封装一个 PDF 预览组件,这个组件接收本地或在线的pdf地址,然后在页面中使用组件的车时候…...
排序问题——晴问题库
排序问题——晴问题库 排序问题是线性数据的常考问题,在解晴问题库时总结归纳以下关于排序的解题方法和思路。 感谢晴神 排序问题是数据结构中十分重点的一部分。 可以分为五个大部分: 插入排序选择排序交换排序基数归并 再具体往下分: 插…...
【LabVIEW FPGA入门】FPGA中的数学运算
数值控件选板上的大部分数学函数都支持整数或定点数据类型,但是需要请注意,避免使用乘法、除法、倒数、平方根等函数,此类函数比较占用FPGA资源,且如果使用的是定点数据或单精度浮点数据仅适用于FPGA终端。 1.整数运算 支持的数…...
华为设备VRRP配置
核心代码: 需要对所有虚拟路由器设置(要进入到对应的端口) vrrp vrid 38 virtual-ip 192.168.10.254 vrrp vrid 38 priority 120 vrrp vrid 38 track int g0/0/1 reduced 30①mac由vrid生成 ②指定虚拟ip ③虚拟ip作为内部主机的网关&#x…...
2024年艺术发展与文化产业国际会议(ICADCI 2024)
2024年艺术发展与文化产业国际会议(ICADCI 2024) 2024 International Conference on Art Development and Cultural Industry(ICADCI 2024) 数据库:EI,CPCI,CNKI,Google Scholar等 一、【会议简介】 2024年艺术发展与文化产业国际会议(ICADCI 2024)将于丽江这座美丽…...
华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳
华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳 Excerpt 文章浏览阅读1.2k次。鸿蒙开发,获取手表心跳,按钮点击后触发的方法,我们将跳转页面的代码写在这个位置就可以实现点击按钮进行跳转页面的动作。在HTML文件“index.hml”,添加按钮,这里按钮用到是标…...
使用企业订货软件的担忧与考虑|网上APP订货系统
使用企业订货软件的担忧与考虑|网上APP订货系统 网上订货系统担心出现的问题 1,如果在订货系统中定错(多)货物了该怎么办 其实这也是很多人在网购或者是现实中经常会犯的一个错误,但是网上订货平台为大家提供了很多的解决方案,其中对于订单的…...
Java-集合-Collection类
1 需求 2 接口 Interface Collection<E> public interface Collection<E> extends Iterable<E> 2.3 Method Detail int size()boolean isEmpty()boolean contains(Object o)Iterator<E> iterator()Object[] toArray()<T> T[] toArray(T[] a)…...
Linux:/proc/kmsg 与 /proc/sys/kernel/printk_xxx
目录 前言一、/proc/kmsg1、简介2、如何修改内核日志缓冲区3、dmesgklogctl 函数(来源于 man 手册) 4、扩展阅读 二、 /proc/sys/kernel/printk_xxx三、/dev/kmsg 前言 本篇文章将为大家介绍与 Linux 内核日志相关的一些控制文件,共同学习&am…...
使用 Postman 发送 get 请求的简易教程
在API开发与测试的场景中,Postman 是一种普遍应用的工具,它极大地简化了发送和接收HTTP请求的流程。要发出GET请求,用户只需设定正确的参数并点击发送即可。 如何使用 Postman 发送一个GET请求 创建一个新请求并将类型设为 GET 首先&#…...
【网站项目】基于jsp的拍卖网站设计与实现
🙊作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
为什么洗衣机会每天自动上传3.6GB数据?
“为什么我家的LG洗衣机每天都会上传3.6GB的数据?” 一位名为Johnie用户发现他家电设备的异常行为后表示很不理解,随后他把相关信息发布在X平台,很快这篇帖子就收获了超过1700万次的浏览量,并迅速变成一场争议和网络安全battle。…...
word写标书的疑难杂症总结
最近在解决方案工作,与office工具经常打交道,各种问题,在此最下记录: 1.word中文档距离文档顶端有距离调整不了 1.疑难杂症问题1,多个空格都是不能解决 #解决办法:word中--布局-下拉框---“版式”--“垂直…...
2024,会更好嘛?
2023转眼过去,从1月的前端,2月的java,3月的数据库,4月的运维,我尝试了许多技术方向,终究在2023年5月,凭着背的Java面试题,拿到了三四个offer。2023年6月,边玩边整自己的毕…...
Nsis打包Unity Exe文件(通用)
Nsi 脚本 !include "MUI2.nsh"#使用现代UI Unicode true #使用Unicode !define EXENAME "exeName" #定义常量 exe名称 !define SHORTCUT "快捷方式名称" #定义桌面快捷方式的中文名称Name ${EXENAME} #安装程序的title OutFile "${EXENAME…...
【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (5) - Unity Catalog 简介 UC的关键特性 之所以DataBricks要用UC, 很大程度是对安全的管控。从上文可以了解到它的四大特性&#…...
redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式
前言: redis部署集群常见的一般有三种模式:主从模式,Sentinel(哨兵模式),Redis Cluster(高可用Cluster集群),根据不同的需求可自定义选择部署方式。 Redis 主从模式&…...
072:vue+mapbox 点击某图层feature,高亮这部分
第072个 点击查看专栏目录 本示例是介绍如何在vue+mapbox中点击某图层feature,高亮这部分。思路是通过点击,获取点击部分的feature信息,生成一个新的source和layer,如果这个图层不为空,则清除之,相当于点击了别的地方,原有的高亮会删除掉,在别的地方高亮。 直接复制下…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
