【深度学习】李宏毅2021/2022春深度学习课程笔记 - Convolutional Neural NetWork(CNN)_李宏毅2021笔记-程序员宅基地

技术标签: 算法  cnn  深度学习  人工智能  # 深度学习  


一、图片分类问题

图片分类:输入一张图片,输出该图片的类别

在这里插入图片描述

实际上,一张彩色图片是由RGB三个通道(channels)叠加而成的,每个通道都是 100 × 100 的大小,所以彩色图片是 3维 的,如下图所示

在这里插入图片描述

根据【深度学习】李宏毅2021/2022春深度学习课程笔记 - Classification(Short Version)这一节的介绍,我们可以很容易的想到,想要对图像进行分类,我们可以先将其展开、拉长为一条一维向量,如下图所示,再将展平的一维向量传给全连接网络进行训练。这是最简单最直觉的进行图像分类的方法。

在这里插入图片描述


二、观察图片分类问题的特性

2.1 观察1

如图所示,假设我们想知道图片的类别是鸟,作为人类,我们要想分辨图中有没有鸟,我们会着重分别图中有没有鸟的某些明显的特征,比如我看到图中有鸟的头,我就认为图中有鸟,我看到图中有鸟的尖嘴,我也认为图中有鸟

在这里插入图片描述

下面给出了一个例子,我们可能第一眼看过去,看到了类似乌鸦头的特征,然后下意识地觉得这应该是鸟。但是仔细看才发现,噢原来还有猫头的信息,而且猫头的信息更大,所以最终我们会做出正确的判断,认为图像中的是猫

在这里插入图片描述

2.2 简化1:卷积

根据上面的叙述,我们知道,其实对于图像的识别,我们可能不需要用到图片上的所有信息,大多数情况,我们只需要看图片的一小部分就可以识别出图像的类别。

如下图所示,我们可能会对图片划分为一个一个的接受域(receptive field),然后不同的接受域传给不同的层去进行特征的提取和前向传播。
这个特征域是可以根据你要求解的图像分类问题的特性任意设定的,比如你要求解的图像分类问题的图像中的特征位于图片的左上角和右上角,那接受域你也大可不用设置为正方形,可以设置成两个正方形分开的一种特殊接受域。

在这里插入图片描述

尽管接受域的设计有很多种方法,但实际上,大部分图片的特征都是紧挨着的,比如识别猫的头,那猫头的特征就是一片长方形像素所代表的。所以,在大部分情况下,我们的接受域都是设计一个长方形或者正方形。

下图就展示了最常用的接受域设计方法(正方形):接受域大小为3×3,对所有channels生效,每次移动步长为2,接受域超出图片的部分就用0填充(padding)

在这里插入图片描述

2.3 观察2

如下图所示。在不同图片中,鸟嘴的位置可能是不一样的,但是他们都代表了同一个特征,如果用不同的NetWork去侦测相同的特征,他们干的都是侦测鸟嘴,这样就会有点冗余

在这里插入图片描述

2.4 简化2:共享参数 - 卷积核

可以让两个NetWork共享参数,两个网络参数相同,但是由于侦测的地方不同,输入不同,也会使得输出不同,这样不会导致特征识别不到,还可以减少参数,减少模型冗余

在这里插入图片描述

在这里插入图片描述

2.5 观察3

一张图片,进行适当的缩小之后,我们还是可以进行较为准确的识别。所以是不是意味着,我们可以对图片进行缩小,从而降低网络的学习难度,并达到比较好的预测效果呢?

在这里插入图片描述

2.6 简化3:池化

2.6.1 Max Pooling

最大池化指的是,在指定池化范围内,只保留最大值的像素点

在这里插入图片描述

下面就是只保留了最大像素点的示意图。可见,图像数据得到了压缩

在这里插入图片描述

2.6.2 Mean Pooling

平均池化:就是在指定池化范围内,保留该范围内像素点的平均值

通常地,一般会在卷积层后接一个Pooling层,如此循环,构成CNN

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

2.7 小结

全连接网络用来求解图像分类问题时,可以获取图片的所有信息,但是这样模型参数太大,很难Train起来,就算Train起来了,由于用到了图片上的所有信息,所以很可能出现过拟合现象。比如,同样的一只猫,可能因为背景的不同,网络就识别不好了,全连接网络不能较好地提取图像特征

卷积神经网络采用接受域和参数共享策略,降低了模型地参数,使得模型过拟合的风险大大降低,且具有较好的图像特征提取能力

在这里插入图片描述


三、卷积工作原理

由于李宏毅老师教程里关于卷积工作原理部分我认为讲的不是很详细,所以大家可以看看下面链接里关于卷积工作原理的讲解

【深度学习】PyTorch深度学习实践课程笔记 - Lecture_10_Basic_CNN


四、CNN的其他应用

4.1 Playing Go

除了图像分类,CNN还可以用在下围棋上,把黑子作为1,白子作为-1,无子作为0,这样就可以构成一张Image,传入CNN,做一个19×19的分类问题,预测下一步要落子的位置

在这里插入图片描述

为什么CNN可以用在下围棋上呢?

因为围棋和图片一样,我们有时候可以只看一部分区域的局势,就可以推测出下一步要怎么下,所以可以用CNN

在这里插入图片描述

但是我们可以思考一个问题,CNN用在下围棋上时,能不能用Pooling?其实答案很明显,是不能的。这是因为如果我们把一盘棋缩小,相当于等间距的删去若干的行和列,这样子和原局势可能就相差甚远了啊!这也是围棋和图像上的一些不同。

果然,在Alpha Go的网络架构里,也没有采用Pooling,显然,网络架构的设计还是要根据问题而定,不是所有时候CNN都要加Pooling的,只有当Pooling后可以保证原始数据缺少较少的情况下才可以用。

在这里插入图片描述

4.2 其他应用

  • 语音领域
  • 影像领域

在这里插入图片描述


五、To Learn More…

下图展示了CNN存在的问题。即它不能很好地处理图像的放大和缩小问题。

如下图所示,假设它能很好的识别上方的狗狗图片,但是将图片放大后,狗狗的特征范围发生了变化,这时候CNN就不一定能识别出狗狗了!有一个网络结构可以解决这个问题:Spatial Transformer Layer,详情见下方链接。

在这里插入图片描述

当然,如果非要用CNN,也可以采用一些方法缓解这个问题。例如,我们通常会在图像分类前,对训练数据进行数据增强,增强的方法包括图像旋转、图像平移、图像缩放、图像加噪声等等。目的就是让CNN尽可能多的在训练时就看过这些放大或缩小的情况,以至于测试的时候遇到放缩的情况也能较好的识别。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_51545953/article/details/128293129

智能推荐

PostgreSQL数据库管理 第二章体系结构_tablespace location should not be inside the data -程序员宅基地

文章浏览阅读1.6k次。PostgreSQL数据库管理第二章体系结构概述PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统(RDBMS)。支持丰富的数据类型(如JSON和JSONB类型,数组类型)和自定义类型。PostgreSQL内存页面的默认大小是8kB。PostgreSQL有以下主要特性:1良好支持SQL语言,支持ACID、关联完整性、数据库事务、Unicode多国语言。2高并发设计,读和写互不阻塞3 支持大量类型的数据库模型:关系型,文档型(如JSON和J._tablespace location should not be inside the data directory

实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输入12,输出12*12的乘法口诀表。_pta要求实现一个函数,打印乘法口诀表,输入正整数n(9>=n>=1),输出n行口诀表,每个等-程序员宅基地

文章浏览阅读184次。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>void mul(int x){ int i = 0; int j = 0; for (i = 1; i <= x; i++){ for (j = 1; j <= i; j++){ printf(" %d*..._pta要求实现一个函数,打印乘法口诀表,输入正整数n(9>=n>=1),输出n行口诀表,每个等

运用 ADB 卸载内置应用_adb pm uninstall-程序员宅基地

文章浏览阅读2w次,点赞6次,收藏32次。ADB 简单使用一,打开 adb窗口方式1,通过cmd命令 进入到命令窗口,输入路径定位到adb.exe 目录2,直接找到adb.exe 所在文件夹,Shift+ 鼠标右键 点击powerShell,直接打开。个人更新后第二种方式,各人习惯,自由选择二,基本操作1,查看adb设备连接数adb devices2,安装apkadb install 包名3,卸载apkadb uninstall 包名是不是所有的应用都可以这样操作呢?答案肯定是否定的,对于预置的系统._adb pm uninstall

idea启动spring项目中文乱码_spring 配置文件 中文 乱码 idea-程序员宅基地

文章浏览阅读1k次。idea启动spring项目中文乱码使用 tomcat8使用idea启动spring项目(前端jsp)时,发现控制台打印日志的中文全部都乱码,页面部分乱码,从请求分析得到,从后台返回的数据是正常的,只是js里面写死的数据是乱码从这些信息可以分析得到, 控制台日志中文乱码, 但后台返回前端的编码方式是正常的, 前端js的数据中文乱码解决方案:1.控制日志乱码: 这些日志都是容器打印出来的,所以需要是配置容器, tomcat>conf>logging.properties把其它编码换成_spring 配置文件 中文 乱码 idea

陷波反馈抑制_dsp陷波器算法-程序员宅基地

文章浏览阅读1.3k次。反馈抑制由来已久,在声学反馈中一直是困扰着很多系统调试人员。在会议系统中,声反馈啸叫是扩声系统中经常出现的现象,不仅破坏音质,而且还容易烧毁扩音系统中的功率放大器、扬声器的中高音单元,并会限制整个扩音系统的声功率。本文描述了陷波去反馈的基本原理以及实现的难点。 反馈模型在一个单通道扩声系统中,从源信号到扬声器信号的闭环频率响应能够表示为: 在分母中的G(w, t)F(w, ..._dsp陷波器算法

判断单链表是否关于中心对称_java单向链表是否对称-程序员宅基地

文章浏览阅读928次。bool function(LinkList L,int n){ Elemtype array[n/2]; LNode *p=L->next; int i; for(i=0;i<n/2;i++) { array[i]=p->data; p=p->next; } i--; if(n%2!=0) p=p->next; while(p!=NULL&&i>=0) { if(array[i]==p->data) {._java单向链表是否对称

随便推点

数据库----数据更新_当修改reader表元组的rno时,级联修改loan表中该读者的借阅记录。 (2)当删除reader-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏8次。实验目的熟悉并掌握创建表,插入记录,查询记录,删除记录,修改记录。创建索引,删除索引。创建视图,使用视图,删除视图。实验内容仍然基于上次课程建立的小型图书借阅系统。如果使用实验室的机器完成实验,首先重做上次课的步骤1-4建立相应数据库。实验步骤(以用户CC的身份建立连接,并在此连接下执行后面的操作。)1、 查询记录:在Reader表中查询直接上司是“李四”的员工的名字SELECT rname from reader where rboss=’李四’;2、 修改记录:在Reader_当修改reader表元组的rno时,级联修改loan表中该读者的借阅记录。 (2)当删除reader

java毕业设计校园闲置物品交易平台mybatis+源码+调试部署+系统+数据库+lw-程序员宅基地

文章浏览阅读515次。java毕业设计校园闲置物品交易平台mybatis+源码+调试部署+系统+数据库+lw。springboot基于SSM框架的项目实训管理系统设计与实现。springboot基于JSP的企业办公管理系统设计与实现。ssm+sqlserver海城同泽中学图书仓库管理系统。ssm基于Web的医学院校大学生就业信息管理系统。ssm+sqlserver精品旅游项目管理系统。ssm基于HTML的寿光农产品的资源展示平台。ssm基于Java的摄影网上预约管理系统。ssm基于JavaWeb的好好吃查询系统。

转载 17.C++-string字符串类(详解)-程序员宅基地

文章浏览阅读368次。在C++ 中新增了一个字符串类型 string。比较与C语言只能用字符数组来表达字符串,大大提高了字符串操作的简便性。而且string也比较常用,但是对于不熟悉的人来说它的很多功能我们都不了解。我是想写写自己对使用string的一些感悟的,无奈下面这篇博客太优秀。有一定C++基础更能理解作者所写。转自:https://www.cnblogs.com/lifexy/p/8642163....

【ZYNQ入门】第六篇、ZYNQ驱动SD卡读取TXT文本和BMP图片_zynq存储数据-程序员宅基地

文章浏览阅读1.3k次,点赞25次,收藏27次。ZYNQ驱动SD卡读取TXT文本和BMP图片的原理_zynq存储数据

RUN-XGBOOST回归预测 | Matlab 龙格库塔优化xgboost回归预测_matlab人口预测模型龙格库塔函数-程序员宅基地

文章浏览阅读97次。在机器学习和数据科学领域,回归预测是一项重要的任务。通过建立数学模型,我们可以根据已有的数据来预测未知数据的结果。XGBoost是一种流行的机器学习算法,它在回归预测中表现出色。本文将介绍如何使用龙格库塔算法RUN来优化XGBoost,以实现更精确的数据回归预测。首先,让我们了解一下XGBoost和龙格库塔算法RUN的基本概念。XGBoost是一种基于梯度提升树的机器学习算法。它通过迭代地训练多个弱学习器,然后将它们组合成一个强学习器。_matlab人口预测模型龙格库塔函数

Mac svn使用学习-4-客户端cli命令详解-程序员宅基地

文章浏览阅读641次。客户端cli的使用WC:Working Copy 你的工作区将文件或目录版本化,这样下一次提交到存储库的时候,他们就都会被提交上去。能实现版本化的命令有:add1.import是否访问存储库:是格式:import [PATH] URL选项:Valid options: -q [--quiet] : print no..._make intermediate directories

推荐文章

热门文章

相关标签