当前位置: 首页 > news >正文

Lesson 6 Convolutional Neural Network(CNN)

听课(李宏毅老师的)笔记,方便梳理框架,以作复习之用。本节课主要讲了CNN的适用范围,整体架构与工作流程,CNN的应用,CNN的缺点以及解决方法。

1. CNN的输入与输出

CNN是专门为了图像而设计的一种网络架构

1.1 输出

CNN的输出是一个向量,每一个元素都代表了属于该类的得分。举例来说,在训练时,通过使下图的两个向量的交叉熵最小,达到最佳的训练效果。
在这里插入图片描述

1.2 输入

一张100*100的彩色图片将分为三个channel,代表RGB,将三个tensor拉长,组成了右边的很长的列向量
在这里插入图片描述

2. 在图像识别时是否真的需要全连接网络?

一个图像经常是几百几千的像素,而且还是三个channel, 那么这么长的向量输入进去,如果每一个都要跟不同的权重参数相乘,比如我们有1000个神经元,那么我们需要1001003*1000个权重参数。虽然这样模型的弹性将会非常大,但是容易造成overfitting,况且计算时间也会很久
在这里插入图片描述

3. observation 1:识别关键部分

我们在设置神经元的时候,不用让一个神经元看整张图片,而是看最关键的部分。
在这里插入图片描述
具体怎么看关键的部分呢?我们先引入一个概念——receptive field。将这个333的立方体拉长展开成右侧的这个长向量,输入进神经元。
在这里插入图片描述

在这里插入图片描述
常见的设置如下:

  • kernel size:333(但是一般将深度省略)
  • stride:2 步长为2,表示每次向右或者向下移动receptive field两格
  • 可以重叠
  • 不够了可以用0补全
  • 每个receptive field通常配置64个神经元监视
    在这里插入图片描述
    一直移动直到这个立方体的右下角,那么receptive fields将会覆盖整张图片。

4. observation 2:相同的关键部分出现在不同的区域

4.1 从神经元角度讲述

如果因为receptive field不一样,监测receptive field的相同的pattern的神经元不一样,那么参数量也太大了。
在这里插入图片描述
所以我们提出了一种方法——parameter sharing
就是指receptive field不一样,但权重参数却一样。但是一个receptive field的两个神经元不会共享参数。
在这里插入图片描述
这里的神经元我们有一个专门的名字来称呼——filter
在这里插入图片描述

4.2 小结

在这里插入图片描述

4.3 从filter角度讲述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这步就是要看哪个receptive field跟filter更接近(就是更像关键部位),越接近分越高

第一个filter做完之后按照同样的方法做filter2,形成了两层,我们称之为feature map
在这里插入图片描述

4.4 两种角度的对比

在这里插入图片描述
在这里插入图片描述

5. observation 3: 子采样不会改变图片

由于有时图片数据量过于庞大,可以考虑采用子采样,不会太影响图片,又减少了计算量。

5.1 池化的具体过程(以max pooling为例)

在这里插入图片描述
在这里插入图片描述
通常情况下是2次conv1次pooling,或者1次conv1次pooling

5.2 小结

在这里插入图片描述

6. CNN应用

6.1 AlphaGo

在这里插入图片描述
为什么AlphaGo能用CNN做呢?
其实我们可以把一个小棋局看成是一个pattern,而这个pattern可能出现在棋盘的任意位置
在这里插入图片描述
pooling对于CNN来说并不是绝对要用的,我们要明确pooling的本质是子采样用以减少计算量,但是如果计算量不大就没必要采用pooling,采用了说不定还不准确,所以AlphaGo就完全没用pooling
在这里插入图片描述

6.2 speech and NLP

在这里插入图片描述

7. CNN的缺点

如果给CNN训练时的图是上面这个小狗,但是让他去识别下面这个小狗,可能不一定识别成功,因为CNN是无法处理放大缩小旋转的。
但是这还是有解决方法的——Data Augmentation. 在训练的时候,就对训练集中的数据进行放大缩小旋转,丰富我们的数据集
在这里插入图片描述

相关文章:

  • 【数据库】索引 视图 触发器 分页查询
  • 深入解析汽车MCU的软件架构
  • grafana table合并查询
  • 从零开始:神经网络(2)——MP模型
  • 编程笔记 html5cssjs 007 文章排版 颜真卿《述张长史笔法十二意》
  • lambda有先后顺序
  • el根据需求合并列
  • 基于php的用户登录实现(v2版)(持续迭代)
  • [贰],万能开篇HelloWorld
  • linux多线程编程使用互斥量的原理分析和应用实例
  • 数据结构之顺序表及其实现!
  • 提示词微调:LLMs适应新任务的强大技术
  • 解释 Git 的基本概念和使用方式。
  • openssl3.2 - exp - 可以在命令行使用的口令算法名称列表
  • Pytorch学习 day08(最大池化层、非线性激活层、正则化层、循环层、Transformer层、线性层、Dropout层)
  • 【剑指offer】让抽象问题具体化
  • export和import的用法总结
  • isset在php5.6-和php7.0+的一些差异
  • Java 多线程编程之:notify 和 wait 用法
  • Python连接Oracle
  • session共享问题解决方案
  • spring学习第二天
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Travix是如何部署应用程序到Kubernetes上的
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 包装类对象
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 关于extract.autodesk.io的一些说明
  • 通过npm或yarn自动生成vue组件
  • 小试R空间处理新库sf
  • 移动端解决方案学习记录
  • k8s使用glusterfs实现动态持久化存储
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #pragma 指令
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (JS基础)String 类型
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (转)ObjectiveC 深浅拷贝学习
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ***检测工具之RKHunter AIDE
  • .“空心村”成因分析及解决对策122344
  • .NET CF命令行调试器MDbg入门(一)
  • .NET Core 2.1路线图
  • .NET下ASPX编程的几个小问题
  • /etc/sudoers (root权限管理)
  • /var/lib/dpkg/lock 锁定问题
  • [ 蓝桥杯Web真题 ]-布局切换
  • []指针
  • [Android Studio] 开发Java 程序
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [Angular] 笔记 6:ngStyle