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

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

0写在前面

这两天陆续看了一些关于卷积神经网络的视频和博文,把我觉得比较有用的知识和内容梳理一下,理顺逻辑,自己也可加深理解,写在这里,日后想看,随手就能翻来,永不会丢失。

1卷积神经网络

既然叫卷积神经网络,这里面首先是卷积,然后是神经网****络,是2者的一个结合,卷积这个概念实际上来自于信号处理领域,一般是对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,当图像像素值经过过滤器后得到的就是特征图。

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

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

5 padding/边缘填充

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

unvalid

valid

下图展示的就是带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: [inChannels, height,weight] /[3,8,8];

卷积核的shape: [outChannels, inChannels, height,weight]/[5,3,3,3];

输出图片的shape: [outChannels,   outHeight,  outweight ]/[5,6,6];

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

输出矩阵的通道数(out depth)由卷积核的输出通道数所决定,比如下面这个动画当中,卷积核有8个,那么输出outChannels则为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.hqwc.cn/news/578204.html

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

相关文章

3D人体姿态估计项目 | 从2D视频中通过检测人体关键点来估计3D人体姿态实现

项目应用场景 人体姿态估计是关于图像或视频中人体关节的 2D 或 3D 定位。一般来说,这个过程可以分为两个部分:(1) 2D 视频中的 2D 关键点检测;(2) 根据 2D 关键点进行 3D 位姿估计。这个项目使用 Detectron2 从任意的 2D 视频中检测 2D 关节…

太阳能发电园区3D可视化:揭秘绿色能源新纪元

在科技飞速发展的今天,绿色能源已成为推动社会进步的重要力量。太阳能发电作为绿色能源的重要代表,正在全球范围内掀起一股清洁能源的革命浪潮。 太阳能发电园区作为集中展示太阳能发电技术和应用的场所,其规模之大、设备之复杂,常…

政安晨:【Keras机器学习实践要点】(三)—— 编写组件与训练数据

目录 介绍 编写组件 训练模型 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 介绍 通过 Ker…

封装性练习

练习 1 : 创建程序:在其中定义两个类: Person 和 PersonTest 类。定义如下: 用 setAge() 设置人的合法年龄 (0~130) ,用 getAge() 返回人的年龄。在 PersonTest 类中实例化 Person 类的对象 b ,调用 set…

李雅普诺夫函数

李雅普诺夫函数是一种用于描述动力系统稳定性的数学工具。它在动力系统和控制理论中具有广泛的应用,尤其是在研究非线性系统的稳定性方面。 李雅普诺夫函数通常用于证明动力系统在一些条件下是稳定的。一个李雅普诺夫函数是一个实数值函数,通常表示为 V…

【Django学习笔记(二)】CSS语言介绍

CSS语言介绍 前言正文1、CSS 快速了解2、CSS 应用方式2.1 在标签上应用2.2 在head标签中写style标签2.3 写到文件中 3、问题探讨:用Flask框架开发不方便4、选择器4.1 ID选择器4.2 类选择器4.3 标签选择器4.4 属性选择器4.5 后代选择器4.6 注意事项 5、样式5.1 高度和…

使用mysql官网软件包安装mysql

确定你的操作系统,我的是Centos myqsl 所有安装包的地址:https://repo.mysql.com/yum/ 如果你是使用rpm安装你可以到对应的版本里面找到对应的包。 mysql 发行包的地址:http://repo.mysql.com/ 在这里你可以找到对应的发布包安装。 这里使用y…

【Qt】:坐标

坐标 一.常用快捷键二.使用帮助文档三.Qt坐标体系1.理论2.代码 一.常用快捷键 注释:ctrl / • 运⾏:ctrl R • 编译:ctrl B • 字体缩放:ctrl ⿏标滑轮 • 查找:ctrl F • 整⾏移动:ctrl shift ⬆/…

什么是防火墙,部署防火墙有什么好处?

与我们的房屋没有围墙或界限墙一样,没有防护措施的计算机和网络将容易受到黑客的入侵,这将使我们的网络处于巨大的风险之中。因此,就像围墙保护我们的房屋一样,虚拟墙也可以保护和安全我们的设备,使入侵者无法轻易进入…

3D汽车模型线上三维互动展示提供视觉盛宴

VR全景虚拟看车软件正在引领汽车展览行业迈向一个全新的时代,它不仅颠覆了传统展览的局限,还为参展者提供了前所未有的高效、便捷和互动体验。借助于尖端的vr虚拟现实技术、逼真的web3d开发、先进的云计算能力以及强大的大数据处理,这一在线展…

蓝桥备赛——堆队列

AC code import os import sys import heapq a [] b [] n,k map(int,input().split())for _ in range(n):x,y map(int,input().split())a.append(x)b.append(y) q []# 第一种情况:不打第n个怪兽# 将前n-1个第一次所需能量加入堆 for i in range(n-1):heapq.h…

使用anime.js实现列表滚动轮播

官网&#xff1a;https://animejs.com/ html <div id"slide1"><div class"weather-item" v-for"item in weatherList"><div><img src"../../images/hdft/position.png" alt"">{{item.body.cityInf…