实验总结报告模板(实验总结通用模板)

背景

在深度学习过程中,我们经常会碰到或者听说一些疑问,例如我们在初始化网络的时候,要设置权重和偏置,那么要设置多大呢,等等。非常多的问题,需要我们去验证,并且证明论文和前辈的结论正确。本文就是根据这些疑问,做了不同的实验,竭力证明这些观点的正确或者错误。

本文主要测试了以下几个问题:

  1. 初始权重(w)、偏置(b)和学习速率的设置对识别率的影响
  2. 识别率和死神经元(输出为零)之间的关系
  3. 由于在ReLU网络中,存在大量0神经元(死神经元),是不是可以精简网络
  4. ReLU和Sigmoid效率简单对比
  5. Sigmoid网络和ReLU网络识别率差异的问题
  6. Pre-Train的训练方法学习和实验
  7. 图片填充后网络识别率的变化

实验

一、权重、偏置和学习速率

实验说明:

权重和偏置设置不同的数值,但是都是取标准误差为0.1~0.9之间任意数值;学习速率设置为0.3~2.7之间任意数,使用mnist数据集,根据不同的迭代次数得到不同组合数据,并形成初步结论。

神经网络说明:

三层网络,输入层为784个神经元,隐藏层共1层,有30个神经元,输出层为10个神经元;输出层使用sigmoid和ReLU作为激活函数

实验一:

实验总结报告模板(实验总结通用模板)

实验二:

实验总结报告模板(实验总结通用模板)

实验三:.

实验总结报告模板(实验总结通用模板)

实验总结:

  1. 随着权重的标准差增加,识别率会越来越低。
  2. 从蓝色曲线看,随着迭代次数的增加,高学习速率下的识别率逐渐覆盖高标准差的权重;
  3. 随着迭代次数增加,出现的最高识别率的数值也在增加:0.9690(30次)< 0.9695(40次) < 0.9704(50次)

结合上面实验查阅了关于权重初始化的论文:

参考论文一:《Understanding the difficulty of training deep feedforward neural networks》

本论文中有这样一段话:

We find that the logistic sigmoid activationis unsuited for deep networks with random initialization because of its mean value, which can drive especially the top hidden layer into saturation.

通过上面这段话,我们获知这篇论文还是主要讲的是sigmoid网络中的权重初始化,论文结论如下,我们也通过实验进行了验证。

对于激活函数为sigmiod的网络,初始化方法如下:

  1. 对网络逐层进行Pre-Train
  2. 在一般情况下可以使用n*Var(W)=1/3进行初始化,n为层的神经元个数(where n is the layer size(assuming all layers of the same size))。
  3. 如果逐层进行权重初始化,满足如下公式(We call it the normalized initialization):
实验总结报告模板(实验总结通用模板)

说明:每一层W设置属于U指定的范围,并且跟神经元个数相关

以上就是论文《Understanding the difficulty of training deep feedforward neural networks》的结论,

针对论文的结论,我们验证了sigmoid网络和ReLU网络,发现初始化方法同样适用于ReLU网络。

  1. 在Sigmoid网络中,需要通过这个初始化理论逐层Pre-Train然后再组合成深层网络才可以。否则隐藏层为2层或以上,识别率就从10%左右起,非常难于训练。
  2. 我们还发现,对于初始化方法2,即n*Var(W)=1/3, 当隐藏层为8层及以上,即加上输入层和输出层一共为10层及以上的网络的时候,这个初始化对于sigmoid和ReLU网络都会失效。
  3. 在Tensorflow关于xavier的API中建议:This initializer is designed to keep the scale of the gradients roughly the same in all layers. In uniform distribution this ends up being the range: x = sqrt(6. / (in + out)); [-x, x] and for normal distribution a standard deviation of sqrt(2. / (in + out)) is used。我们可以看到当使用random_normal初始化权重的时候,和Xaviver论文中提到的略有不同。
  4. 在Tensorflow API中,对于一般的初始化方法,在版本1.0中使用的是sqrt(3./(in + out))作为权重的初始化参数,在注意事项3中sqrt(2./(in + out))出现在tensoflow api 1.3中.

参考论文二:《Surpassing Human-Level Performance on ImageNet Classification》

本论文主要是讲述的CNN网络的初始化,论文是通过两个Cases完成了推导:

  1. Forward Propagation Case
  2. Backward Propagation Case

结论:

在Forward Propagation Case中,通过推导得出如下公式:

实验总结报告模板(实验总结通用模板)

其中,下标“l”为神经网络层级,输入层l = 1,其他层为l = l;n = k*k*c, k为当前层spatial filter的大小,c为channel数量. 此时依然设置偏置b = 0

注:

论文中特别强调,当在input层,即l = 1时,存在n1Var[w1] = 1, 和结论公式不符合。事实上即便input层使用通用公式来设置也问题不大。

在Backward Propagation Case中,通过推导得出如下公式:

实验总结报告模板(实验总结通用模板)

其中,下标“l”为神经网络层级,n^ = k*k*d, k为当前层spatial filter的大小, d为channel数量,且和Forward Propagation Case中的c比较,存在c(l) = d(l-1)

根据上面2个case总结的公式,我们可以看出,我们单独使用其中一个公式是完全可以的,这个在论文中也提到了。

二、ReLU和Sigmoid(Tanh)效率

在阅读论文《ImageNet Classification with Deep Convolutional Neural Networks》的时候,有如下结论和配图:

实验总结报告模板(实验总结通用模板)

论文中说明:A four-layer convolutional neural network with ReLU(solid line) reaches a 25% trainning error rate on CIFAR-10 six times faster than an equivalent network with tanh neurons(dashed line)

实验四:

实验说明:

这里我们使用一个三层网络,输入层、隐藏层和输出层,神经元个数分别为784、784、10,激活函数分别为ReLU和Sigmoid。由于只是个验证实验,并没有调出识别率最大值,只是以98%的识别率为终点

实验数据:

Sigmoid网络:

epoch

Sigmoid

epoch

Sigmoid

epoch

Sigmoid

1

0.8645

21

0.971

41

0.9786

2

0.9002

22

0.9703

42

0.9785

3

0.9136

23

0.9721

43

0.9786

4

0.9223

24

0.9704

44

0.9782

5

0.9292

25

0.9723

45

0.9788

6

0.9318

26

0.9739

46

0.9793

7

0.9391

27

0.9734

47

0.9785

8

0.9426

28

0.9741

48

0.9785

9

0.9458

29

0.9746

49

0.9793

10

0.9478

30

0.9755

50

0.98

11

0.9522

31

0.9745

12

0.9552

32

0.976

13

0.9559

33

0.9761

14

0.9594

34

0.9762

15

0.9626

35

0.9764

16

0.9634

36

0.9767

17

0.9645

37

0.9777

18

0.9668

38

0.9767

19

0.9683

39

0.9775

20

0.9678

40

0.9782

ReLU网络:

epoch

ReLU

1

0.9461

2

0.9628

3

0.9699

4

0.9742

5

0.9751

6

0.9761

7

0.9789

8

0.9806

9

0.9799

通过以上数据我们绘制 Accuracy vs Epoch

实验总结报告模板(实验总结通用模板)

从上图得知,确实在ReLU网络中,可以更快的达到较高识别率,这里ReLU的效率是Sigmoid网络的5倍以上,接近论文中说得在CNN网络中的6倍左右。

结论:在使用同样的初始化参数的情况下,达到相同识别率,ReLU网络需要的迭代次数大约是Sigmoid网络所需迭代次数的1/6~1/5,所以ReLU效率更高, 也就是5~6倍于sigmiod及tanh类的网络。

  1. Sigmoid和ReLU识别率是否存在差异

在做神经网络的测试的时候,我们会产生如下疑问:

  1. 为什么不做Pre-train的ReLU网络识别率会比Sigmoid网络高?
  2. 为什么各种说法说关于识别率ReLU网络并不优于Sigmoid网络?

通过多方验证和实验,答案如下:

  1. ReLU由于是max(0,x), 即在输出<0的时候,会强制输出0,这样就使得ReLU网络就有了天然的稀疏性,所以训练速度会比Sigmoid网络快很多,如果迭代不充分,就会给人ReLU网络比Sigmoid网络的识别率高;
  2. 为了减少Sigmoid网络训练的复杂度,达到较高的识别率,一般需要Pre-train,在这样的精心调优下,Sigmoid和ReLU网络的识别率会相当,识别率相当。
  3. 通过实验四可知,ReLU网络的训练速度是Sigmoid网络训练速度的6倍左右。

四、填充

我们在进行运营过程中,经常会出现对于图片或者文字的整理。例如对于图片不够我们指定的大小时,需要拉伸或者直接填充,以达到我们需要的input神经元个数。

填充实验主要是使用的mnist数据集,mnist数据集中图片灰度最大值为1,最小值为0.

在不做扩充填充的时候,识别率为:0.9704

实验五:

实验说明:对于mnist数据进行改造,mnist数据是28*28的图片灰度数据,对于这些数据不变化,把28*28的数据改造成32*32的数据,填充数据为0\0.5\1等三个数据。

实验网络为1024:30:10的三层网络,其中三个数字为每层神经元的个数,激活函数为ReLU,loss函数为二次代价函数。Var(W) = 0.2, 学习速率为2.51,迭代50次

实验结果如下:

四周填充

结果

训练数据填充值

测试数据填充值

l_rate: 2.510000, w_bl: 0.200000,epoch: 50

None

None

epoch: 48(50), accuracy: 0.967300

1

1

epoch: 43(50), accuracy: 0.899600

1

0

epoch: 48(50), accuracy: 0.952000

0

1

epoch: 49(50), accuracy: 0.842100

0

0

epoch: 46(50), accuracy: 0.964800

0.5

0.5

epoch: 35(50), accuracy: 0.968100

0.5

0

epoch: 36(50), accuracy: 0.953800

0.5

1

epoch: 38(50), accuracy: 0.954300

0

0.5

epoch: 50(50), accuracy: 0.939300

1

0.5

epoch: 44(50), accuracy: 0.959000

实验结论:

当测试数据特征数据信息增多时,会影响获得较高的识别率

实验六:

实验说明:训练数据和实验数据填充相同的数值。

实验结果如下:

训练数据填充值

测试数据填充值

l_rate: 2.510000, w_b: 0.200000,epoch: 50

0.1

0.1

01: 0.920700, 50: 0.966500

0.2

0.2

01: 0.917600, 44: 0.968100

0.3

0.3

01: 0.909200, 48: 0.964500

0.4

0.4

01: 0.911300, 44: 0.963200

0.5

0.5

01: 0.919100, 44: 0.962300

0.6

0.6

01: 0.911700, 33: 0.967100

0.7

0.7

01: 0.905100, 40: 0.961100

0.8

0.8

01: 0.908800, 47: 0.965700

0.9

0.9

01: 0.899600, 48: 0.960700

1

1

01: 0.897700, 43: 0.960700

实验结论:

当随着数据填充值越来越接近有效特征的时候,识别率会有一定下降。结论也同样验证了实验五中的结论

五、数据做有规则变换

在mnist数据集中,数据总是>0的,所以为了验证在所有样本数据分布在[-1, 1]之间的情况,所以要对mnist数据做一些调整,然后观察识别率变化。

实验七:

实验说明:针对mnist数据集,使用y=2x-1的公式变换数据集中所有数据,由于数据集中原来数据是在[0, 1]之间,所以使用2x – 1的方式,就是的数据分不在了[-1, 1]之间。

实验结果如下:

01: 0.906800, 49: 0.956900

实验结论:

在将原来数据集特征分散的情况下,会对识别率造成一定的影响,不过影响不大。

实验八:

实验说明:针对mnist数据集,如果x!=0的情况下,使用y=2x-1的公式变换数据集中所有数据,由于数据集中原来数据是在(0, 1]之间,所以使用2x – 1的方式,就是的数据分不在了[-1, 1]之间.本实验区别于实验七的着重点是非特征值变成了中间值,即特征数据相对增加。

实验结果如下:

01: 0.862300, 14: 0.913100

实验结论:

由于特征数据相对增加,所以识别率相对于实验七下降了,或说明需要更多的迭代或者样本进行学习。

............试读结束............

查阅全文加微信3231169

如来写作网gw.rulaixiezuo.com(可搜索其他更多资料)

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 3231169@qq.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.wuxingwenku.com/24308.html
(0)
上一篇 2022年7月1日 上午5:51
下一篇 2022年7月1日

相关推荐

搜索资料 全部分类 搜索教程
扫码关注

客服代找资料
加客服微信:3231169
私发想要资料的标题/关键词
快速代查找相关所有资料

如来写作网客服微信3231169

立即扫码添加我吧

微信咨询

客服代找资料
加客服微信:3231169
私发想要资料的标题/关键词
快速代查找相关所有资料

如来写作网客服微信3231169

立即扫码添加我吧

返回顶部