Convolutional Neural Network(CNN)——卷积神经网络

1.NN的局限性

  • 拓展性差
    • NN的计算量大性能差,不利于在不同规模的数据集上有效运行
    • 若输入维度发生变化,需要修改并重新训练网络
  • 容易过拟合
    • 全连接导致参数量特别多,容易过拟合
    • 如果增加更多层,参数量会翻倍
  • 无法有效利用局部特征
    • 输入数据需要展平成一维,丢弃了图像等数据中的二维结构信息
    • 相邻层完全连接,关注的是全局,没有关注局部区域
  • 不具有平移不变性
    • 信息位置变换时,识别率就大幅降低

2.CNN的优势

• 大大降低过拟合的风险

• 利用数据中的局部结构

        • 局部结构比全局特征具有更好的泛化能力

        • 许多有用信息局限于局部区域

• 提高神经网络的鲁棒性

        • 平移不变性:位置的改变不会改变输出

        CNN常用于图像任务中

3.卷积

3.1 卷积操作

        CNN的核心部分在于卷积操作,其使用卷积过滤器/卷积核(convolution filters/kernels)。通过卷积操作可以实现特征提取。

        卷积操作如何实现?假设有一个5×5输入图像,使用一个3×3的卷积核(具体参数是什么意思会在后面介绍,这里不关键),卷积核参数如图。

        然后卷积核在输入图像上从左上角开始,从左到右,从上到下移动,每次移动一格,如果移动到右边位置不够一个卷积核大小则换行,如果移动到下面位置不够则直接结束,对应位置相乘相加再加上偏置项(可选)便是卷积后的输出

                                                                   

滑动6次后,下面已经不够位置了,卷积结束

        这里给出第一行怎么算出来的

        

        使用不同参数的卷积核可以达到不一样的效果

        同样的在卷积操作后会使用激活函数

        每一个数据点均经过激活函数进行非线性变换

3.2 卷积核

        卷积核包括如下几个参数

  • 卷积核大小:w×h,更大的卷积核会使输出尺寸更加小。常使用的有1×1,3×3,5×5,7×7。
  • 步长stride:卷积核每次滑动多少格。步长可以成倍的减少输出尺寸。
  • 输入通道数in_channels:就是输入数据是多少张叠加的,例如RGB图片就由R,G,B三通道合成的。输入通道为多少,就会使用多少个相同卷积核,分别对各个通道进行卷积,然后对应位置相加合成一个通道输出
  • 输出通道数out_channels:通过卷积可以生成多少个通道特征图,使用多少组卷积核就可以生成多少个输出通道。
  • 填充padding:在四周填充0像素的宽度,可以增大输出的尺寸。同时也可以解决常常丢失边缘像素的问题

        所以在1.的例子中,完整的描述应该是输入图像大小为5×5,通道数为1,设定卷积核大小为3×3,步长为1,输入通道数和输出通道数都为1,填充为0。

——卷积核上的权重参数同样通过训练学习而得,他就是CNN的神经元。

——输入的位置信息嵌入到特征通道中
——在一次卷积中不同位置用的都是同一个卷积核,只是它在移动的,因此输出共享权重,因此
显著减少参数数量
——卷积核每次都会卷积一个局部区域,因此它可以在数据中查找局部结构

——使用多个卷积核,每个卷积核都会专注于输入数据的不同属性,从而生成不同的特征

…………………………………………………………………………………………………………………

几个关于通道数的例子

1.输入通道数为3。设置卷积核大小为3×3,输入通道数为3,输出通道数为1,使用三个卷积核

2.输入通道数为3。设置卷积核大小为3×3,输入通道数为3,输出通道数为4。会使用4组每组3个卷积核。

3.输入通道数为1。设置卷积核大小为3×3,输入通道数为1,输出通道数为3。会使用3组每组1个卷积核。

        将所有这些通道堆叠在一起,我们可以得到一个特征图。

…………………………………………………………………………………………………………………

如何计算输出尺寸

卷积层输出大小 = (输入图像大小 - 卷积核大小 + 2 × 填充数) ÷ 步幅大小 + 1

output = (input - kernel_size + 2padding) / stride + 1

如果输入宽高可以被步幅整除,那么

output = input / stride

4.池化

        池化同样会使用一个核,然后滑动,但这个核不带权重参数。池化层不会改变通道数,常用于减小特征图的尺寸。

其参数如下:

1.卷积核大小

2.步长

3.填充

        输出尺寸计算同卷积操作。当有多个输入通道数,会对每一个输入通道进行池化操作然后合并输出通道只有一个

池化层的作用:

  • 下采样(减少尺寸)减少过多的信息。这也会导致信息丢失
  • 增加额外的非线性变换,减少过拟合
  • 引入平移不变性
  • 关注特征而不是它们的位置,降低对位置的敏感性(通过下面两个操作就知道为什么)。卷积操作对位置很敏感。

1.最大池化(Max pooling)

        取核对应部分的最大值

• 达到特征选择的效果
• 引入额外的非线性映射

2.平均池化(Average pooling)

        取核对应部分的平均值

• 比起最大池化层更好地保留信息

• 减少神经元数量

• 线性操作

• 全局平均池化可以有效抵抗深度CNN中的过拟合。

全局平均池化(GAP)是一种对整个特征图进行操作的池化方法。它的操作步骤如下:

  1. 对于给定的特征图,针对每个通道,计算该通道内所有元素的平均值。
  2. 将每个通道内的平均值作为该通道的汇总特征。
  3. 最终得到一个包含所有通道汇总特征的向量
  4. 全局平均池化通常用作最后一层卷积层之后,用来减少特征图的维度,并生成一个包含每个通道重要特征的向量。这个向量可以输入到全连接层或分类器中,以进行最终的分类或预测任务。

最终得到的汇聚特征向量可以看作是整个特征图的全局信息表示

5.卷积块

        一个基本的卷积块通常由卷积+激活+池化构成

6.卷积神经网络

卷积神经网络通常包含若干个卷积块用于特征提取,接着使用全局平均池化层生成一个包含每个通道重要特征的向量并通过flatten拉成一维列向量,接着使用一个全连接层,全连接层输出大小一般是分类数目,接着连接一个softmax完成分类任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/284833.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python接口自动化测试-unittest-批量用例管理

我们日常项目中的接口测试案例肯定不止一个,当案例越来越多时我们如何管理这些批量案例?如何保证案例不重复?如果案例非常多(成百上千,甚至更多)时如何保证案例执行的效率?如何做(批…

59. 螺旋矩阵 II(java实现,史上最详细教程,想学会的进!!!)

今天来分享一下螺旋矩阵的解题思路及代码的实现。 题目描述如下: 首先拿到这道题,首先不要慌张,我们来仔细分析一下会发现并没有那么难。 首先看下边界的元素是1、2、3递增的,那么我们也许可以根据这一点先把边界的元素一个一个给…

建行江门市分行致力数字人民币加速融入百姓生活

数字金融是“数字中国”建设的重要组成部分。建行江门市分行主动拥抱数字经济浪潮,全力探索数字金融赋能实体经济和社会民生,不断助力增强人民群众对金融服务的获得感、幸福感和安全感。 缴交住维如此简单! 江门是著名侨乡,有40…

Java小案例-RocketMQ的11种消息类型,你知道几种?(死信消息)

前言 在RocketMQ中,死信消息(Dead-Letter Message)是指那些在正常情况下无法被消费者消费的消息。这些消息会被存储在死信队列(Dead-Letter Queue,简称DLQ)中。 死信消息的特性包括: 不会再被…

RocketMQ EventBridge 核心概念

理解EventBridge中的核心概念,能帮助我们更好的分析和使用EventBridge。本文重点介绍下EventBridge中包含的术语: EventSource:事件源。用于管理发送到EventBridge的事件,所有发送到EventBridge中的事件都必须标注事件源名称信息…

关键字、标识符、变量、基本数据类型

一、关键字(Keyword) 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(或单词) 特点:全部关键字都是小写字母 Java关键字查询关键地址: http:// https://docs.oracle.com/j…

微服务——服务异步通讯(MQ高级)

MQ的一些常见问题 消息可靠性 生产者消息确认 返回ack,怎么感觉这么像某个tcp的3次握手。 使用资料提供的案例工程. 在图形化界面创建一个simple.queue的队列,虚拟机要和配置文件里面的一样。 SpringAMQP实现生产者确认 AMQP里面支持多种生产者确认的类…

Jmeter 性能-负载阶梯场景

1、安装阶梯测试的第三方插件->搜jpgc 选项-JMeter Plugins Manager -搜jpgc 空格,然后安装 2、脚本-线程组选jpgc Stepping Thread Group 最终并发数为100,并发数从0开始,5秒内增加10个并发数,增加10个后持续30s,…

[C++]——STL简介

带你了解c的STL 前言:一、什么是STL?二、STL有什么版本?三、STL的组件有哪些?四、如何学习STL?五、总结 前言: 我写这个博客,是为了在学习过程中能够更加有条理,更加全面,更加清晰的学习STL。…

Pipelined-ADC设计一:序言

现在是2023年12月18日,准备开新帖,设计一个 流水线型 模数转换器( Pipelined-ADC )。记录帖,后续会放在咸鱼。同步记录,谨防盗用。 初定指标:12位50Mhz,采用2.5bit每级结构&#xff…

教育机构小程序管理系统的全方位优化

随着互联网的快速发展,线上教育也日益受到人们的关注和欢迎。为了满足广大学生和家长的需求,教育机构纷纷开发出自己的小程序管理系统。本文将详细介绍如何使用乔拓云平台,一键开发出自己的教育机构小程序管理系统。 1.进入乔拓云后台 首先&…

C# 使用FluentHttpClient请求WebApi

写在前面 FluentHttpClient 是一个REST API 异步调用 HTTP 客户端,调用过程非常便捷,采用流式编程,可以将所有请求所需的参数一次性发送,并直接获取序列化后的结果。 老规矩从NuGet上安装该类库: 这边一定要认准是 P…