卷积神经网络(CNN)——基础知识整理

文章目录

1、卷积神经网络

2、图片格式

3、图片卷积运算

4、Kernel 与 Feature Map

5、padding/边缘填充

6、Stride/步长

7、pooling/池化

8、shape

9、epoch、batch、Batch Size、step

10、神经网络

11、激活函数


1、卷积神经网络

既然叫卷积神经网络,这里面首先是卷积,然后是神经网络,是二者的一个结合,卷积这个概念实际上来自信号处理领域,一般是对2个信号进行卷积运算,见下图:

神经网络,这是机器学习的元老,是对人脑神经元工作机制的模拟,每个神经元是一个计量单元,输入的数据与权重进行相乘、求和,再加上偏置,得到的数据再经过激活函数,将结果进行输出,见下图,多个神经元相互连接组成神经网络,具体就不展开说了。

卷积神经网络在图像分类和识别领域的应用非常多,最早用于手写数字的分类识别,后来逐渐发展起来。

2、图片格式

首先从手写体图像识别说起,一副图片如果是单色的,那么可以看成是一个二维的数字矩阵,每个像素点的颜色都可以用灰度值来表示;那如果图像是彩色的,可以将图像看成是RGB三个单色图片叠加的组合。

每一张图片的每一个像素点,其实都是一个数值,整体可看成一个三维矩阵。

3、图片卷积运算

那么对一个彩色图像做卷积,到底做了什么呢?下面这张动图,很好地展示了图像卷积计算的过程,原始图像有RGB三个通道channel1-3,对应有3个卷积核Kernel1-3,每一个通道的图片与对应的卷积核做乘法运算,每个通道得到的数值再相加,加上总体的偏置Bias得到特征图(feature map)里面的一个值。

下面是这个图是一个立体的展示:

4、Kernel 与 Feature Map

这里面第一个问题,就是卷积核为什么是3*3大小的,实际上这个尺寸也是经过学者们不断研究总结出来的,目前认为3*3的感受野足够用,而且运算量也会相对低,还有1*1的卷积核在使用,其他的基本不用了。

第二个问题,卷积核里面的参数是怎么来的,其实这里面的参数机器学习要实现的,当我们把所有的核参数都调整好,那这个模型也就确定了。也有一些先验的卷积核,如下面的核,进行卷积之后,可以实现锐化和边缘提取的效果。

那我们对一幅图片进行卷积之后,就会形成一个Feature Map,它会提取一些特征,用不同的核进行卷积就会输出多个Feature Map。

  • 卷积核/Kernels(convolution kernel)也叫过滤器、滤波器。
  • 特征图/Feature map,当图像像素值经过过滤器后得到的就是特征图。

下面这两张图就很直观地展示了kernel 和 feature map的实际样子。

卷积神经网络处理过程中,随着模型运算的深入,图像的尺寸(h*w)会越来越小,但是提取的特征会越来越多。

5、padding/边缘填充

这里面由于边界的问题,每一次卷积之后,图像不可避免地会被压缩一点,这就涉及到一个概念padding,如果设置padding的值为‘same’,则会在原图像周围补充1圈像素点,一般补0,这样后面的图像尺寸都会与原图像相同。默认参数是“valid”,翻译过来是有效的意思,这里的有效指的是与卷积核做运算的图片像素都是有效的,实际上就是没有外圈的补0。

unvaildvalid

下图展示的就是带padding的卷积效果,这个图的问题是用的是4*4的卷积核,实际中没有有4*4卷积核的。

用3*3的卷积核,可保持图像卷积后尺寸不变。

图片引自:https://github.com/vdumoulin/conv_arithmetic

6、Stride/步长

上图是步长为1的情况,如果步长为2,就是相当每隔两行或者两列进行卷积,实际上起到了降维的作用,就是卷积后的feature map尺寸会变小。

图片引自:https://github.com/vdumoulin/conv_arithmetic

7、pooling/池化

池化主要作用是把数据降维,也叫下采样,可以有效的避免过拟合。主要有两种池化方式,Max pooling / avg pooling,通常情况下,池化区域是2*2大小,池化之后,4*4的图片,会变成2*2大小。

8、shape

在tensorflow和pytorch中,shape的结构有所区别:

  • tensorflow输入shape为(batch_size,  height, weight, in_channels)/(样本数、图像高度、图像宽度, 图像通道数)
  • pytorch输入shape为(batch_size, in_channels, height, weight)

上图中,

输入图片的shape:[in_channels, height, weight]/[3,8,8];

卷积核的shape:[out_channels, in_channels, height, weight]/[5,3,3,3];

输出图片的shape:[out_channels, out_height, out_weight]/[5,6,6];

卷积核的输入通道数(in depth)由输入矩阵的通道数(in_channels)所决定。比如:一个RGB格式的图片,其输入通道数为3。

输出矩阵的通道数(out depth)由卷积核的输出通道数所决定,比如下面这个动画当中,卷积核有8个,那么输出out_channels则为8。

图片 引自:https://animatedai.github.io/

9、epoch、batch、Batch Size、step

  • epoch:表示将训练数据集中的所有样本都过一遍(且仅过一遍)的训练过程。在一个epoch中,训练算法会按照设定的顺序将所有样本输入模型进行前向传播、计算损失、反向传播和参数更新。一个epoch通常包含多个step。
  • batch:一般翻译为“批次”,表示一次性输入模型的一组样本。在神经网络的训练过程中,训练数据往往是很多的,比如几万条甚至是几十万条——如果我们一次性将这上万条的数据全部放入模型,对计算机性能、神经网络模型学习能力等的要求太高了;那么就可以将训练数据划分为多个batch,并随后分批将每个batch的样本一起输入到模型中进行前向传播、损失计算、反向传播和参数更新。但要注意,一般batch这个词用的不多,多数情况下大家都是只关注batch size的。
  • Batch Size(批大小):表示在单次训练中传递给模型的图像数量,我们在神经网络训练过程中,往往需要将训练数据划分为多个batch;而具体每一个batch有多少个样本,那么就是batch size指定的了。
  • step:一般翻译为“步骤”,表示在一个epoch中模型进行一次参数更新的操作。通俗地说,在神经网络训练过程中,每次完成对一个batch数据的训练,就是完成了一个step。

10、神经网络

实际上,上面的卷积处理过程,都是在对图片进行特征提取,而最终要进行分类或预测就需要借助神经网络了,所以一般在卷积处理之后需要对数据进行压平(flatten)操作,使其变为1维的数据,便于送入神经网络的输入层。

神经网络模型里面(见下图),全连接层/Dense层是深度学习中常用的一种神经网络层,也称为密集连接层或多层感知机层。它既能当输入层(input layer),又能当输出层(output layer),还能当中间层(Hidden layer)。

推荐一个绘制神经网络图的工具:NN SVG

11、激活函数

在神经网络中,激活函数用于引入非线性,使网络能够学习复杂的映射关系。如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。以下是一些常用的激活函数。常用的有:

参考:机器学习算法那些事

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

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

相关文章

4、Cocos Creator 动画系统

目录 1、Clip 参数 2、动画编辑器 3、基本操作 更改时间轴缩放比例 移动显示区域 更改当前选中的时间轴节点 播放 / 暂停动画 修改 clip 属性 快捷键 4、模拟实验 5、动画事件 6、注意事项 参考 Animation 组件是节点上的一个组件。Clip 动画剪辑就是一份动画的声…

67、yolov8目标检测和旋转目标检测算法部署Atlas 200I DK A2开发板上

基本思想:需求部署yolov8目标检测和旋转目标检测算法部署atlas 200dk 开发板上 一、转换模型 链接: https://pan.baidu.com/s/1hJPX2QvybI4AGgeJKO6QgQ?pwdq2s5 提取码: q2s5 from ultralytics import YOLO# Load a model model YOLO("yolov8s.yaml")…

物流监控升级,百递云·API开放平台助力某电商平台实现高效物流管理

不论是电商平台自身还是消费者,都有着对物流监控的强烈需求。 消费者下单后be like: 每十分钟看一次快递轨迹 放心,电商平台也一样关心物流状态!怎样第一时间向用户传递物流状态? 怎么减少重复的提问和投诉?怎样监管…

Collection与数据结构 顺序表与ArrayList

1. 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在…

【Docker】搭建强大的Nginx可视化配置工具 - nginxWebUI

【Docker】搭建强大的Nginx可视化配置工具 - nginxWebUI 前言 本教程基于绿联的NAS设备DX4600 Pro的docker功能进行搭建。 简介 NginxWebUI是一个基于Java的,专门用来管理Nginx的图形界面工具。它是开源的,使用相对简单且功能全面。 使用NginxWebUI…

接劳巴,拔掉KL15,MCU重启。不接劳巴,拔掉KL15,MCU正常下电

最近遇到一个神奇的现象,在调试一个单KL15的项目,发现接着劳特巴赫调试器,然后拔掉KL15,软件进入了重启Reset函数,没有进入期望的下电SwitchOff函数。 而不接劳特巴赫,拔掉KL15,观测电流&#…

Qt实现Kermit协议

1 概述 Kermit文件运输协议提供了一条从大型计算机下载文件到微机的途径。它已被用于进行公用数据传输。 其特性如下: Kermit文件运输协议是一个半双工的通信协议。它支持7位ASCII字符。数据以可多达96字节长度的可变长度的分组形式传输。对每个被传送分组需要一个确认。Kerm…

python-判断列表字典循环

比较运算符 不等于 ! if 布尔值: [执行语句-真实执行] else: [执行语句] mood_index int(input("对象今天的心情指数的是:")) if mood_index > 60:print("恭喜,今晚应该可以带游戏,去吧")…

2024年水电站大坝安全监测工作提升要点

根据《水电站大坝运行安全监督管理规定》(国家发改委令第23号)和《水电站大坝运行安全信息报送办法》(国能安全〔2016〕261号)的相关规定、要求,电力企业应当在汛期向我中心报送每日大坝汛情。近期,全国各地…

【机器学习】深度解析KNN算法

深度解析KNN算法 KNN(K-最近邻)算法是机器学习中一种基本且广泛应用的算法,它的实现简单直观,应用范围广泛,从图像识别到推荐系统都有其身影。然而,随着数据量的增长,KNN算法面临着严峻的效率挑…

[yolox]ubuntu上部署yolox的ncnn模型

首先转换pytorch->onnx->param模型,这个过程可以查资料步骤有点多,参考blog.51cto.com/u_15660370/6408303,这里重点讲解转换后部署。 测试环境: ubuntu18.04 opencv3.4.4(编译过程省略,参考我其他博客) 安装…

【智能家居入门3】(MQTT服务器、MQTT协议、微信小程序、STM32)

前面已经写了三篇博客关于智能家居的,服务器全都是使用ONENET中国移动,他最大的优点就是作为数据收发的中转站是免费的。本篇使用专门适配MQTT协议的MQTT服务器,有公用的,也可以自己搭建(应该要钱)&#xf…

常见的数学方法

Math类表示数学类,其中的数学方法都被定义成为static形式,所以可以直接通过Math类的类名调用某个数学方法。语法格式: Math.xxx(参数); 例题 输入n个整数a1,a2,a3,......an,求这n个数的最大值max,最小值min&#xff0…

算法之并查集

并查集(Union-find Data Structure)是一种树型的数据结构。它的特点是由子结点找到父亲结点,用于处理一些不交集(Disjoint Sets)的合并及查询问题。 Find:确定元素属于哪一个子集。它可以被用来确定两个元…

【御控物联】 IOT异构数据JSON转化(场景案例一)

文章目录 前言技术资料 前言 随着物联网、大数据、智能制造技术的不断发展,越来越多的企业正在进行工厂的智能化转型升级。转型升级第一步往往是设备的智能化改造,助力设备数据快速上云,实现设备数据共享和场景互联。然而,在生产…

【蓝桥杯】填空题技巧|巧用编译器|用Python处理大数和字符|心算手数|思维题

目录 一、填空题 1.巧用编译器 2.巧用Excel 3. 用Python处理大数 4.用Python处理字符 5.心算手数 二、思维题 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】 一、填空题 …

蓝桥杯day14刷题日记

P8707 [蓝桥杯 2020 省 AB1] 走方格 思路&#xff1a;很典型的动态规划问题&#xff0c;对于偶数格特判&#xff0c;其他的正常遍历一遍&#xff0c;现在所处的格子的方案数等于左边的格子的方案数加上上面格子的方案数之和 #include <iostream> using namespace std; …

蓝桥杯物联网竞赛_STM32L071_13_定时器

CubeMx配置LPTIM: counts internal clock events 计数内部时钟事件 prescaler 预分频器 updata end of period 更新期末 kil5配置&#xff1a; 中断回调函数完善一下&#xff1a; void HAL_LPTIM_AutoReloadMatchCallback(LPTIM_HandleTypeDef *hlptim){if(cnt ! 10) cnt…

iOS - Runloop介绍

文章目录 iOS - Runloop介绍1. 简介1.1 顾名思义1.2. 应用范畴1.3. 如果没有runloop1.4. 如果有了runloop 2. Runloop对象3. Runloop与线程4. 获取Runloop对象4.1 Foundation4.2 Core Foundation4.3 示例 5. Runloop相关的类5.1 Core Foundation中关于RunLoop的5个类5.2 CFRunL…

152 Linux C++ 通讯架构实战7 ,makefile编写改成for cpp,读配置文件,内存泄漏查找,设置标题实战

读写配置文件代码实战。nginx.conf 一个项目要启动&#xff0c;需要配置很多信息&#xff0c;第一项就是学习如何配置一个项目 nginx.conf的内容 #是注释行&#xff0c; #每个有效配置项用 等号 处理&#xff0c;等号前不超过40个字符&#xff0c;等号后不超过400个字符&#…