首页 > 其他分享 >卷积神经网络理解(二)

卷积神经网络理解(二)

时间:2024-01-30 09:11:41浏览次数:20  
标签:函数 卷积 矩阵 步长 神经网络 理解 池化 图像

1、卷积神经网络的特点

卷积神经网络相对于普通神经网络在于以下四个特点:

  • 局部感知域:CNN的神经元只与输入数据的一小部分区域相连接,这使得CNN对数据的局部结构具有强大的敏感性,可以自动学习到图像的特征。
  • 参数共享:在CNN中,同一个卷积核(filter)在整个输入图像上滑动,共享权重和偏置。这减少了网络的参数量,提高了模型的泛化能力。
  • 池化层:通过池化层,CNN可以降低特征图的分辨率,减少计算量,同时保留主要的特征信息,提高了网络的抗噪能力和泛化能力。
  • 层次化特征提取:通过堆叠多层卷积层和池化层,网络可以逐级提取图像的抽象特征,从低级特征如边缘到高级特征如纹理、形状等。

2、卷积核如何获得的理解

卷积核参数的学习是通过反向传播算法来实现的。

在卷积神经网络的训练过程中,首先随机初始化卷积核参数。

然后,通过前向传播将输入数据与卷积核进行卷积操作,得到输出特征图。

接着,将输出特征图与标签数据进行比较,计算损失函数。

最后,通过反向传播算法,根据损失函数的梯度更新卷积核参数,使得损失函数最小化。

总结起来:卷积神经网络的卷积核参数是通过反向传播算法学习出来的。
在训练过程中,通过前向传播将输入数据与卷积核进行卷积操作,得到输出特征图。
然后,通过计算损失函数并利用反向传播算法,根据梯度更新卷积核参数,使得网络能够自动提取输入数据中的特征。
这样,卷积神经网络就能够实现图像识别和计算机视觉任务。

3、卷积操作的理解

 

图像上每个像素点都是一个数据,我们可以把图像看出一个 n×m 的矩阵。

这里我们可以定义一个 x×y 的矩阵,这个矩阵就叫做卷积核。(按照上面的理解,初始的卷积核随机生成)

卷积核一般选择 3×3 或者 5×5 的,小尺寸的卷积核可以捕获图像中的局部特征,同时避免过度拟合。与较大的卷积核相比,小尺寸的卷积核需要更少的参数,因此层数可以更深,模型可以更加复杂。

举例说明:

设图像的矩阵为5X5的矩阵:

                                         equation

使用的卷积核是3X3的矩阵:

                                              equation

设步长为1,也就是卷积核每次移动一格

先取出图片矩阵中左上角3X3的矩阵:

                                             equation

将它们与卷积核相乘,这里不是矩阵的乘法,而是求内积,就是将两个矩阵对应位置的数相乘,然后再把数字相加起来.

即:

                                1 X 1 + 2 X 2 + 3 X 3 + 6 X 4 + 7 X 5 + 8 X 6 + 11 X 7 + 12 X 8 + 13 X 9 = 411

这样我们可以将运算后的结果放在矩阵中:

                                             equation

步长为1,就是将卷积核向右移动一格,接下来和卷积核进行卷积操作的矩阵是:

                                              equation

然后运算完成之后再填充入矩阵,放在411右边的位置。

对这一层的矩阵进行完卷积操作,由于步长为1,移动到下一层,如此循环,直到将图像遍历完成,就会输出一个比原图像小的矩阵:

                                                

 

步长改变为2

这里还可以将步长设置为2,对于图像来说,矩阵

equation与卷积核进行卷积后,跳过一格,接下来是equation与卷积核进行操作。在换行的时候也是跳过一格,是

        与卷积核进行操作,最后得到的是一个2 X 2 的矩阵。

 

增加偏置系数b

我们也可以在卷积运算的基础上加上一个偏置系数b  ,结果就是输出的矩阵每个数字都增加了 b。

拿刚才步长为1的情况来说,就是

                                     

填充

有时候为了让输出图像和原图像大小相等,还会在图像外围加上 padding 。

比如上面的5 X 5 矩阵,当padding = 1 时,

                                  

这样对图像用 3×3 ,步长为1的卷积核进行卷积操作后,就会得到 5×5 的矩阵了。

我们知道,在线性回归 equation中,已知的是X和 y ,我们要找的就是拟合数据的最优的W .

在卷积神经网络中,卷积核就是W ,它的初始值可以随便设,然后通过梯度下降法最小化损失函数来实现找到最优的卷积核参数。

至于卷积核该选择多大的,步长多少,要不要偏置系数,要不要padding。
对于不同的数据我们也得进行不同的分析,只有不断地尝试,才能够找到最优的方案。

4、池化操作的理解

池化可以对图片数据进行降维处理,常见的池化有最大池化,平均池化。

下面用 4×4 的矩阵来举例子:        

                                   

我们比如选择 2×2 的池化窗口,步长为1.     

最大池化就是对equation取最大值,即6,然后移动到equation中取最大值7,以此类推,步长同卷积操作,最后得到池化后的矩阵:

                                

平均池化就是对equation取平均值,例如equation,如果这时候不是整数,可以用向下取整的方式取3.

池化要考虑的同样有选择几乘几的池化窗口(池化核),选择平均池化还是最大池化,步长为多少,
还有 padding操作,这里也需要根据具体情况具体分析。

5、激活函数

在卷积操作中,我们将卷积核和图像在对应位置上进行相乘,再求和,这是一个线性的变换。

我们还需要一些非线性的变换,来增加模型的表达能力。

下面介绍常见的几种激活函数:

ReLU函数:  equation, 当x为负数时候  equation, 当x 为正数的时候, 它为x。

                  例如图像:equation经过ReLU函数激活就会变成equation

tanh(x)函数:equation

sigmoid函数:   equation

6、全连接层 

 当我们把图像进行多次(也可以一次)卷积、池化、激活函数操作后,图像会变得相对较小,这时我们可以将它们转换成一维向量。

 例如我们可以将 3×3 的矩阵转成 1×9 矩阵,然后我们可以放入全连接层。

                                                

 上图这些红色的点按列来看是3层,分别有9个,5个,2个数据点。比如我们进行2分类,最后一层就放2个点。

 这些连接每一层的黑色的线就是权重,它们的值和卷积核一样,也是随便设置的,之后会随着损失函数的降低会自动调整成最优的参数.

 前向传播

 这里拿下图来举个例子.

                                              

 我们通过卷积和池化的操作得到了图像,然后将图像展平为一维向量 [x1, x2, ........, xn].

例如这里的 x1,x2 ,我们设置一个全连接层,设置输出的那层是2个点,即 y1,y2 .

我们已经初始化好了 w1,w2,w3,w4 .

故y1 = x1w1 + x2w3 , y2 = x1w2 + x2w4.

这样就将数据传入了下一层,由于我们是用梯度下降法更新权重,所以反向传播就是求偏导。

7、softmax函数

经过全连接层,我们进行几分类就会得到几个数据点。然后再对它们进行归一化处理,使这些数据点相加之和为1,并且每个点都是0~1之间的概率分布值。

softmax函数的表达式为 equation

softmax函数用到了指数函数equation,所以当x变化一点,equation变化会很大。能够将差距大的数值差距变得更大,容易区分;

但是,由于是指数函数,当x比较大的时候,equation会很大,容易出现数值溢出

当softmax作为输出节点的激活函数的时候,一般会将交叉熵作为损失函数。

因为 softmax函数将输出的数据转化成了一个个0~1之间的概率值。

 

 

标签:函数,卷积,矩阵,步长,神经网络,理解,池化,图像
From: https://www.cnblogs.com/Zhouce/p/17994978

相关文章

  • 深入理解 C# 编程:枚举、文件处理、异常处理和数字相加
    C#枚举枚举是一个特殊的“类”,表示一组常量(不可更改/只读变量)。要创建枚举,请使用enum关键字(而不是class或interface),并用逗号分隔枚举项:enumLevel{Low,Medium,High}您可以使用点语法访问枚举项:LevelmyVar=Level.Medium;Console.WriteLine(myVar);Enu......
  • 深入理解 C# 编程:枚举、文件处理、异常处理和数字相加
    C#枚举枚举是一个特殊的“类”,表示一组常量(不可更改/只读变量)。要创建枚举,请使用enum关键字(而不是class或interface),并用逗号分隔枚举项:enumLevel{Low,Medium,High}您可以使用点语法访问枚举项:LevelmyVar=Level.Medium;Console.WriteLine(myVar);En......
  • 深入理解 Flink(六)Flink Job 提交和 Flink Graph 详解
    FlinkProgram编程套路回顾1、获取执行环境对象StreamExecutionEnvironmentenv=StreamExecutionEnvironment.getExecutionEnvironment();2、通过执行环境对象,注册数据源Source,得到数据抽象DataStreamds=env.socketTextStream(...)3、调用数据抽象的各种Transformation......
  • 理解Set集合数据结构
    一、Set的基本概念Set是一种包含不重复元素的集合。与List(列表)不同,Set中的元素是无序的,不能通过索引来访问。Set中的每个元素都是唯一的,重复的元素将被自动剔除。二、Set的常见操作1.添加元素:使用add()方法向Set中添加新元素。如果添加的元素已经存在于Set中,则不会有任何改变......
  • Kotlin扩展函数原理解析
    一、扩展函数扩展函数可以方便地给现有类增加属性和方法而不改动类地代码。二、原理funString.addTo(s:String):String{returnthis+s}反编译:@Metadata(mv={1,6,0},k=2,d1={"\u0000\n\n\u0000\n\u0002\u0010\u000e\n\u0002\b\u0002\u001a\u......
  • 卷积神经网络详解+Python实现卷积神经网络Cifar10彩色图片分类
    原文链接:https://blog.csdn.net/master_hunter/article/details/133156758卷积神经网络相对于普通神经网络在于以下四个特点:局部感知域:CNN的神经元只与输入数据的一小部分区域相连接,这使得CNN对数据的局部结构具有强大的敏感性,可以自动学习到图像的特征。参数共享:在CNN中,同一个......
  • 对于计算机体系结构的理解
    计算机体系结构是指根据属性和功能不同而划分的计算机理论组成部分及计算机基本工作原理、理论的总称。它包括计算机的软、硬件的系统结构,有两方面的含义:一是从程序设计者的角度所见的系统结构,研究计算机体系的概念性结构和功能特性,关系到软件设计的特性;二是从硬件设计者的角度所......
  • 一个例子形象地理解同步与异步
    请看一个示例:同步方式请求接口请求一次接口耗时大约100多毫秒代码一个for循环,循环500次,调用方法Request,Request方法中一个while(true)无限循环,同步方式请求url获取数据。代码点评:要是写一个while(true)没问题,这是想运行500个while(true),这代码是错误的,行不通。应该使用Thread或者T......
  • python语言理解
    类python是一门面向对象的语言,强调的是对象,当我们创建一个类时,必然要给这个类赋予对应的属性去描述它,例如一个动物的类,那么这个类应该有动物种类,颜色,年龄,体重,习性等属性,代码如下:classAnimal:def__init__(self,species,color,age,weight,habitat):self.spec......
  • Stacklberg博弈理解
    古诺模型博弈论——连续产量古诺模型-知乎(zhihu.com)(1)两个厂商并不是同时决策,而是一方先决策,另一方根据对方的决策,再作出决策,即博弈有两个阶段(动态博弈);(2)后做决策的博弈方,知道先做决策的博弈方的决策;(3)两个厂商中,一个寡头厂商是处于支配地位的领导者,另一个是寡头厂商的......