11.神经网络与机器学习(十)—卷积神经网络(CNN)

2023-11-12

1)引言

我们之前的神经网络结构都是全连接的。也就是说:每一个输入神经元的都和相邻层的每一个神经元连接。但是这种连接带来的数据量太大了。以我们之前的一个三层神经元举例[784,30,10]。从输入层到隐藏层有:(784+1)*30=23550个参数。这只是一个三层的神经网络,更不要说深度学习了。因此,人们想出了各种连接架构。比如说:卷积神经网络架构。

2)基本概念

卷积神经网络的每一层都是是一个二维的神经网络。如下图:

这里的输入层神经元是一个28*28的二维网格,这个网格中的每一个点(神经元)正好代表图像中的每一个像素。这种神经网络架构看起来是更加合理的,因为在我们的直观感受中,图片就应该是二维的,每个神经元的值正好对应光的强弱。

(1)局部感受域

这里我们与之前不同的是,我们这里并不把每一个神经元都连接到下一层的每个神经元。我们这里选择输入层的一个小区域,比如5*5大小区域的神经元集合作为输入连接到下一层(隐藏层)的第一个神经元。如下:

我们把这块小区域叫做隐藏神经元的局部感受域

(2)共享权重和偏置

每一个局部感受域(5*5)都有一个权重矩阵(5*5)。而每一个隐藏神经元都有一个偏置。实际上,隐藏层中的每一个神经元都使用的是同样的权重。我们把这个权重矩阵叫做共享权重,隐藏神经元的偏置是共享偏置。又叫filter或者是卷积核

3)隐藏层的构建

(1)单个映射

有了上面的基本概念,我们这里讲一下,如何构建隐藏层。刚才我根据一个卷积核(共享权重和矩阵)得到了第一个神经元。接下来,我们将局部感受域向右移动一个步长,如下:

得到第二个隐藏层神经元。我们总共向右移动23步,再加上之前的一个神经元,第一层总共得到24个神经元。然后,再将局部感受域向下移动一个步长,得到第二层的第一个神经元。再将局部感受域向左移动23步得到第二层24个神经元。然后,再将局部感受域向下移动一个步长,得到第三层第一个神经元。重复上面的步骤,最后我们得到了24*24的隐藏神经元层。如下:


其中第j,k个隐藏神经元对应的激活值是:

还记得吗?我们的每个隐藏神经元对应的权重矩阵和偏置(卷积核)都是一样的。我们举个例子如下:


可以看到j=1,k=1和j=1,k=2时,其权重矩阵是一样的。这也就意味着隐藏层所有的神经元共用相同的权重和偏置

(2)多个映射

你可能会问只用这一种权重矩阵,那么我们不就会丢失好多信息吗?没错刚才的一种权重和偏置(卷积核)设置方式只是生成了一种特征映射(feature map)。我们可以用若干个不同的卷积核来生成若干个特征映射来构成一层隐藏层。每一个特征映射根据卷积核所设定的规则(权重大小)提取了图像的一部分特征。如下:

这里,我们用了三种卷积核来生成了一个拥有三层特征映射的隐藏层。总结如下:

  • 一个权重偏置矩阵(卷积核)和输入生成一个特征映射。

  • 若干个不同卷积核和输入生成若干个特征映射,每一个特征映射代表一种图像特征。

  • 这些不同的特征映射构成一层隐藏层。

4)卷积网络的好处

那么这中卷积结构的神经网络有什么好处呢?答案是很明显的。之前我们计算了全连接的神经网络需要23550个参数。那么对于有20个特征映射的卷积神经网络来说,只需要:(25+1)*20=520个参数。23550/520≈40,效果是惊人的。这对于我们和计算机来说是个好消息。

5)池化(pooling)

卷积层的下一层就是池化层,池化层简化了卷积层输出的网络。那么到底什么池化呢?

池化就是从每一层特征映射的一个小区域内提取出这个区域内的关键信息。这个关键信息的定义方式可以是最大的像素值,也可以这些区域像素的平均值,也可以取区域像素值的平方和再平方根(L2混合)等等。如下:

这里,我们提取出一个特征映射层24*24中的每2*2个小区域中的最大像素值,将提取出的像素值12*12再组成一个最大值池化映射层。我们将所有的特征映射层用这种方式提取池化映射层。然后,这些池化映射层组成了一个池化层。这就是最大值混合。如下:

这是一个由一副28*28图像经过卷积处理,然后再经过池化的流程图。

总结一下,不同的Filter (不同的 weight, bias) ,卷积以后得到不同的 特征映射,不同方式提取关键信息得到不同的pooling map层。

最后我们得到卷积神经网络处理图像的完整流程:


这个网络从28 * 28 个输出神经元开始,这些神经元用于对MNIST 图像的像素强度进行编码。接着的是一个卷积层,使用一个5*5 局部感受野和3 个特征映射。其结果是一个3*24*24隐藏特征神经元层。下一步是一个最大值混合层,应用于2*2 区域,遍及3 个特征映射。结果是一个3*12*12隐藏特征神经元层。这里从池化层到输出层是全连接层。

到这里,我们的卷积神经网络到这里就结束了。回想一下学了什么:局部感受域,共享权重和偏置,特征映射,池化,全连接,L2混合,最大值混合。

学到这里有一点个人感受:当你碰到自己一时不理解的公式例子什么的,自己写一写算一算就出来了。

希望有志同道合的小伙伴关注我的公众平台,欢迎您的批评指正,共同交流进步。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

11.神经网络与机器学习(十)—卷积神经网络(CNN) 的相关文章

  • 外包干了2个月,技术退步明显.......

    先说一下自己的情况 大专生 18年通过校招进入武汉某软件公司 干了接近4年的功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了2年的女朋友
  • 【Tensorflow2.0】11、经典图像CNN模型实现代码

    文章目录 1 Lenet5 2 AlexNet 3 VGG 4 Inception系列 v1到v4 4 1 Inceptionv1 GoogLeNet 4 2 inceptionv2 4 3 inceptionv3 4 4 Inceptio

随机推荐

  • Android快速开发框架-ZBLibrary 源码分享

    坐标标准库ZBLibrary 是一个MVP架构的Android快速开发框架 提供一套开发标准 UI Data Listener 以及模板和工具类并规范代码 封装层级少 简单高效兼容性好 一句代码就可实现全局滑动返回 可重写 集成方便快捷的照
  • matlab练习程序(c/c++调用matlab

    这里的环境是windows7 vs2010 matlabR2010b 上一篇是通过engine来调用matlab中的语句 本篇是通过调用m文件编译成的h lib dll文件而实现的 首先写一个函数mysvd m function s v d
  • docker国内镜像加速

    1 阿里云容器 生成自己的加速地址 登陆地址 https cr console aliyun com 选择自己的系统 2 修改配置文件 针对Docker客户端版本大于 1 10 0 的用户 您可以通过修改daemon配置文件 etc doc
  • Linux防火墙

    安全防御 常见的攻击手段 拒绝服务 已知漏洞 口令破解 欺骗用户 常见的安全防御设备 基础类防火墙 IDS类 入侵检测系统 提供报告 事后分析 IPS类 入侵防御系统 针对数据包分析 根据模式匹配 阻断非法访问 主动安全类 什么是防火墙 工
  • 这篇文章带你读懂IP地址

    这篇文章带你读懂IP地址 一 IP地址介绍 二 IP地址分类及表示 三 IP地址的主要特点 四 特殊IP地址及私有IP地址 一 IP地址介绍 IP地址 全世界唯一的32位 4字节标识符 标识路由器主机的接口 IP地址 lt 网络号 gt l
  • 【Git CMD】Git上传本地代码到远程仓库(6步到位)

    步骤 1 创建指定名称的分支并切换至该分支 2 添加文件到暂存区 3 查看本地仓库和暂存区的状态 4 提交文件到本地仓库 5 查看本地仓库提交的历史 6 将本地当前分支推送到与本地当前分支同名的远程分支 1 创建指定名称的分支并切换至该分支
  • 学习PGL课程:图卷积网络GCN、图注意力网络GAT

    一 GCN 什么是图卷积 不同的地方在于 图像像素点周围的像素个数通常是固定的 而图结构上某个节点周围的节点数是不固定的 图卷积网络计算公式 1 邻接矩阵解释 2 度矩阵 表示节点与之相连节点的个数 包括自环 3 H l 表示第l次迭代的节
  • 具体项目下解决Echarts多端同步开发和维护的问题

    具体问题场景 PC端和移动端需要同时上线图表功能 没有多余工时 之后的版本迭代 功能 样式 配置等 默认双端同步 开发人员只希望维护一套代码 Echarts在移动端有部分功能不兼容不支持 Echarts在移动端的坑 移动端页面使用echar
  • Raspberry Pi使用TinyML运动识别

    我们将使用机器学习来构建在微型微控制器RP2040上运行的手势识别系统 探索Raspberry Pi Pico及其SDK Raspberry Pi Pico是具有灵活数字接口的低成本 高性能微控制器板 主要功能包括 Raspberry Pi
  • C11 : 函数模板 std::function

    目录 std function 定义 实现原理 应用 注意事项 std function 定义 类模板 std function 是一种通用的 多态的函数封装 std function 的实例可以对任何可以调用的目标实体进行存储 复制和调用
  • react hooks无法获取到最新值问题

    无法获取最新值的写法 在state中定义初始值 import React useState useEffect from react const type setType useState 0 通过setType方法修改type div s
  • 字符替换 英文字符串单词个数统计 python123题解

    字符替换 描述 假设有段英文 其中有单独字母 P 被误写为 p 请编写程序进行纠正 输入格式 用户输入一个字符串 不要使用提示词语 输出格式 程序输出字符串 其中原本包含的英文字母 p 全部被替换为 P 输入输出示例 输入 输出 示例 py
  • MYSQL常用字段属性

    MYSQL常用字段属性 1 DECIMAL M D 2 INT 3 VARCHAR 4 CHAR 5 TEXT 6 DATA 1 DECIMAL M D M是总位数 1 65 包含精度 D是小数位 0 30 当表示定点小数时使用类型 比fl
  • PostgreSQL配置优化

    转载请注明原文出处 http blog csdn net roddick621 PostgreSQL配置优化 PostgreSQL配置优化 硬件和系统配置 测试工具 配置文件 主要选项 测试数据 总结 硬件和系统配置 操作系统 Ubuntu
  • GVIM编辑器实现自定义配对关键字之间的跳转

    由于刚开始接触GVIM编辑器 在使用GVIM写Verilog代码的时候发现使用 命令可以实现配对括号之间的跳转 但其它的一些关键字之间却不能实现配对跳转 从而导致在代码量较大的时候常常会出现配对关键字多写或漏写的情况 很不方便 网上查阅了相
  • MMDetection新手安装使用教程(无限踩坑)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 MMDetection安装过程 1 torch torchvision的安装 2 mmdetection的安装 二 MMDetection的使用步骤 1
  • c++中的新成员——new,命名空间

    c 中的动态内存分配 优点 使用更加的方便 解决了c中有很时候没有库文件时不能申请堆内存的情况 使用 c 中是通过new关键字来进行内存空间的申请的 c 中动态内存是基于类型进行的 delete关键字用于释放 new在申请的时候可以进行初始
  • opentsdb+grafana监控环境搭建

    opentsdb是在hbase的基础上设计的时间序列数据库 安装opentsdb必须先有hbase hadoop和hbase是以集群的方式安装 如果在单台服务器上安装 下面的配置文件也是适合的 只要把相应的服务器名移除掉就可以 grafan
  • MAC地址会耗尽吗?

    有可能会耗尽 虽然目前离耗尽的日子还很远 先基本解释一下MAC地址的特点 虽然MAC地址有48位 但并非48位都是可以随便用的 就像IPv4虽然有32位 但也不是所有组合都可以使用一样 MAC地址第一字节的最低2位 bit 是标示地址类型的
  • 11.神经网络与机器学习(十)—卷积神经网络(CNN)

    1 引言 我们之前的神经网络结构都是全连接的 也就是说 每一个输入神经元的都和相邻层的每一个神经元连接 但是这种连接带来的数据量太大了 以我们之前的一个三层神经元举例 784 30 10 从输入层到隐藏层有 784 1 30 23550个参