卷积神经网络(CNN)的训练过程(Training)

在初识神经网络(初识卷积神经网络CNN)篇,对卷积神经网络有了基本的认识。

不过也可以发现一个问题,输入是一张Image,数据信息是确定的;但CNN网络中的数据从哪来?

总不能随便放一个数到CNN网络里,进行图像识别;

想要CNN网络进行正确的识别工作,CNN网络中的数据(weights)需要进行事先训练;那怎么训练这些数据,才能让CNN网络正常工作呢?

这里举一个简单的神经网络例子,说明如何训练CNN网络中的数据(weights):

1 定义基础的神经网络模型:

下图是一个简单的神经网络模型:

卷积神经网络(CNN)的训练过程(Training)

(1)该神经网络由两个Fully-connected layers组成:

第一层Fully-connected layer,有两个kernels,第二层Fully-connected layer也是两个kernels,且大小均为211

(2)该神经网络的输入:

是由两个数据组成的Ifmap(Input Feature Map),大小为211

(3)将此Ifmap输入到该神经网络中,得到最后的输出类目:o1和o2

Ifmap—>神经网络—>o1,o2

2 初始化该神经网络

想要这个神经网络跑起来,已经有了输入的Ifmap数据,但是缺少神经网络中神经元的信息;所以,首先我们要进行初始化

初始化该神经网络中的4个kernels;由于是全连接层神经网络,该4个kernels的大小均为211,即211*4=8个数据

初始化4个kernels的偏置参数bias

给这8+4=12个数据一个随机化的数字,初始化该神经网络

3 进行前向推理

有了Ifmap,有了神经网络数据(weights+bias),此时我们就可以进行前向推理:

3.1 Ifmap经过神经网络第一层:

第一个Fully-connected layer的输入Ifmap数据就是(0.05, 0.10)

第一个kernel(w1=0.15,w2=0.20)的输出h1,就是:

卷积神经网络(CNN)的训练过程(Training)

同理,第二个kernel(w3=0.25,w4=0.30)的输出h2,就是:

卷积神经网络(CNN)的训练过程(Training)

给第一层Fully-connected layer加上一个Activation Function(Sigmoid):

输出h1,h2,就变成:

卷积神经网络(CNN)的训练过程(Training)

3.2 第二层:

此时,喂给第二个Fully-connected layer的数据就是 (0.59327 , 0.59688)

第二层第一个kernel(w5=0.40,w6=0.45)的输出o1,就是:

卷积神经网络(CNN)的训练过程(Training)

同理,第二个kernel(w7=0.50,w8=0.55)的输出o2同样可以计算得出。

给第二个Fully-connected layer加上Activation Function(Sigmoid):

此时(neto1,neto2)—>Sigmoid—>(o1,o2)

(o1,o2)=(0.75136507, 0.772928465)

4 更新网络

在第3节,得到经过初始化之后的神经网络的输出(0.75136507, 0.772928465);

但是,我们期待的输出是类目2,即期待输出为:(0.01 , 0.99)

此时,我们就要计算误差,并更新神经网络

4.1 求出总误差:

结合实际输出和期待输出,求出总误差:

卷积神经网络(CNN)的训练过程(Training)

所以,o1输出端的误差:

卷积神经网络(CNN)的训练过程(Training)

同理,o2输出端的误差:

卷积神经网络(CNN)的训练过程(Training)

从而,得出总误差:

卷积神经网络(CNN)的训练过程(Training)

4.2 对weights求偏导:

有了总误差之后,对前面的权重数据weights改变多少,可以相应纠正这个误差,得到正确输出呢?

我们在这里就可以求得weights对结果的影响大小,即对weight求偏导:

卷积神经网络(CNN)的训练过程(Training)

以对w5求偏导举例,即:

卷积神经网络(CNN)的训练过程(Training)

4.2.1 偏导内容

问题:w5经过几次计算,到得出最后的总误差?

首先,h1经由w5到neto1,neto1经过sigmoid到outo1,最后,outo1经过误差方差到Etotal;

所以,Etoal对w5求偏导,即等于:

卷积神经网络(CNN)的训练过程(Training)

4.2.2 偏导的第一部分:

在上面公式中,偏导的第一部分可以计算得出:

卷积神经网络(CNN)的训练过程(Training)

卷积神经网络(CNN)的训练过程(Training)

卷积神经网络(CNN)的训练过程(Training)

偏导第一部分得到数据:0.74136507

4.2.3 偏导第二部分:

卷积神经网络(CNN)的训练过程(Training)

卷积神经网络(CNN)的训练过程(Training)

得到数据:0186815602

4.2.4 偏导第三部分:

卷积神经网络(CNN)的训练过程(Training)

卷积神经网络(CNN)的训练过程(Training)

得到第三部分数据:0.593269992

4.2.5 偏导输出:

所以,总误差对w5的偏导输出即为:

卷积神经网络(CNN)的训练过程(Training)

4.3 更新weight:

在4.2节,我们已经知道w5对最后误差的影响,从而可以往正确方向修正w5得到正确输出;此时会用到学习率,学习率的定义代表了在这个方向上的步子;

此时,我们就能得到修正后的w5:

卷积神经网络(CNN)的训练过程(Training)

至此,w5就得到更新;

至于w1,w2,w3,w4,w6,w7,w8的更新,可以用同样的方法求得;

4.4 迭代

所有weights更新完后,就可以重新推理过程

把新误差,再次对weights求导,更新神经网络

逐渐迭代,直至神经网络得到想要的输出,至此整个神经网络训练完成。

5 一些问题:

在第4步,只是一个简单的训练原理,在实际中,会遇到各种问题;比如,过拟合,欠拟合…,等等,需要着手调整和解决

同时,学习率的挑选,也不能很随意;

这些问题,在实际过程中,都会遇到。

参考:

[1] https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/

[2]https://towardsdatascience.com/understanding-learning-rates-and-how-it-improves-performance-in-deep-learning-d0d4059c1c10

Original: https://blog.csdn.net/huayangshiboqi/article/details/121174972
Author: huayangshiboqi
Title: 卷积神经网络(CNN)的训练过程(Training)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/628968/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球