Dropout 与网络参数选择总原则 | 学习笔记

简介: 快速学习 Dropout 与网络参数选择总原则

开发者学堂课程【Tensorflow 2.0入门与实战Dropout 与网络参数选择总原则】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/664/detail/11110


Dropout与网络参数选择总原则


内容介绍:

一、 过拟合

二、 使用 Dropout 抑制过拟合

三、构建网络的总原则


一、过拟合

使用上节课的 model,仍然使用 Sequential 模型,三个隐藏层,每层有128个隐藏的神经单元。

model = tf. keras.Sequential()

model.add(tf.keras.layers.Flatten(input_shape=(28,28)))# 28*28

model.add(tf.keras.layers.Dense(128,activation='relu'))

model.add(tf.keras.layers.Dense(128,activation='relu'))

model.add(tf.keras.layers.Dense(128,activation='relu'))

model.add(tf.keras.layers. Dense(10,activation='softmax'))

重新训练一下,编译部分没有任何区别。

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),

loss=' categorical_crossentropy',

metrics=['acc']

)

history = model.fit(train_image,train_label_onehot,

epochs=10,

validation_data=(test_image, test_label_onehot)

这样可以提醒我们在训练节和验证节上的 loss 以及正确率,训练完之后

In [41]: history.history. keys ()

Out[41]: dict_keys([' loss', 'acc , 'val_loss', 'val_acc'])

可以发现,keys 变成了[' loss', 'acc , 'val_loss', 'val_acc']这几项,这个验证项就是因为我们添加了 test_image 和 test_label_onehot。使用 test 数据来验证也是非常客观的,因为 test 数据解释网络也是没有见过的数据。

用绘图看一下两者的变化

plt.plot(history.epoch,history.history.get('loss'),label=' loss')

plt.plot(history.epoch,history.history.get('val_loss'),label='val_loss')

plt.legend()

<matplotlib.legend. Legend at 0x23d1e50b320>

image.png

从中可以看出,第七个 epoch 之后,val_loss 不但没有下降,反而得到了一定程度的上升,但是 train 数据的 loss一直在下降。在验证数据上,不但没有下降,反而上升了,是产生了过拟合的原因。

也可以通过正确率来反映这一点:

plt.plot(history.epoch,history.history.get('acc'),label='acc')

plt.plot(history.epoch,history.history.get('val_acc'),label='val_acc')

plt.legend()

image.png

val_acc 基本上是一个上升的过程,train 数据的正确率,毫无疑问,在一直上升,最后达到95%左右,但是二者的正确率之间有一个巨大的鸿沟,train 数据上得分非常高,test 数据得分没有那么高,这就是一种典型的过拟合。

过拟合:在训练数据上得分很高,在测试数据上得分相对比较低。

欠拟合:在训练数据上得分比较低,在测试数据上得分也比较低。

比如训练得分升高到85%就不再上升,这就说明网络的拟合能力不够,也就是欠拟合。


二、使用 Dropout 抑制过拟合

网络的拟合能力不够,可以通过增加网络中神经元个数和增加网络层数来增加网络拟合能力,从而使其在训练数据上得到一定的提高。

对于过拟合,可以通过 Dropout 抑制过拟合,

Dropout 实际上就是人为的丢弃一些单元,标准的网络,上面是输出,Dropout 层原理上与集成方法非常类似,我们随机的丢弃掉一些隐藏单元,所以每一次的数据输出都会有所不同,在测试的时候,使用全部的神经元,这样得到一个最后相对比较可靠的结果。这就是它的基本原理。

image.png

丢弃掉一些层之后的样子:

image.png

为什么说 Dropout 可以解决过拟合?

(1)取平均的作用

先回到标准的模型即没有 dropout我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用“5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。

(2)减少神经元之间复杂的共适应关系:

因为 dropout 程序导致两个神经元不一定每次都在一个 dropout 网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。

(3))Dropout 类似于性别在生物进化中的角色:

物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝

参数选择原则

理想的模型是刚好在欠拟合和过拟合的界线上,也就是正好拟合数据。

首先开发一个过拟合的模型:

(1)添加更多的层,增加深度

(2)让每一层变得更大,增加隐藏单元个数

(3)训练更多的轮次,增加训练轮次,使其容易产生过拟合。

然后,抑制过拟合:

(1) dropout

(2)正则化

(3)图像增强

抑制过拟合的最好办法是增加训练数据,上面这些方法是在没有训练数据的情况系下,来抑制过拟合。

再次,调节超参数:

学习速率,

隐藏层单元数

训练轮次

超参数的选择是一个经验与不断测试的结果。经典机器学习的方法,如特征工程、增加训练数据也要做交叉验证

 

三、构建网络的总原则

总的原则是:保证神经网络容量足够拟合数据

1、增大网络容量,直到过拟合

2、采取措施抑制过拟合

3、继续增大网络容量,直到过拟合

相关文章
|
20天前
|
存储 算法 网络虚拟化
【计算机网络】学习笔记,第三篇:数据链路层
现在的光纤宽带接入 FTTx 都要使用 PPPoE 的方式进行接入。在 PPPoE 弹出的窗口中键入在网络运营商购买的用户名和密码,就可以进行宽带上网了 利用 ADSL 进行宽带上网时,从用户个人电脑到家中的 ADSL 调制解调器之间,也是使用 RJ-45 和 5 类线(即以太网使用的网线)进行连接的,并且也是使用 PPPoE 弹出的窗口进行拨号连接的
26 5
|
6天前
|
计算机视觉
【YOLOv8改进 - 特征融合NECK】 HS-FPN :用于处理多尺度特征融合的网络结构,降低参数
MFDS-DETR是针对白细胞检测的创新方法,它通过HS-FPN和可变形自注意力解决规模差异和特征稀缺问题。HS-FPN利用通道注意力模块增强特征表达,改善多尺度挑战。代码和数据集可在给定链接获取。此方法在WBCDD、LISC和BCCD数据集上表现优越,证明了其有效性和通用性。YOLO系列文章提供了更多目标检测改进和实战案例。
YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)
YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)
|
28天前
|
数据中心 网络架构 Python
【计算巢】数据中心的网络架构设计原则
【5月更文挑战第31天】探讨数据中心网络架构设计原则:稳定性是基础,需抵御各种挑战;强调扩展性,适应业务发展;追求高效,确保数据传输速度;注重灵活性,灵活应对变化。简单Python代码示例展示网络节点连接。设计时需具备长远眼光,综合考虑技术方案,以构建坚固高效的信息桥梁。同学们,要持续学习和探索,为信息世界贡献力量!
|
7天前
|
机器学习/深度学习 PyTorch 算法框架/工具
神经网络参数初始化
**神经网络参数初始化**是深度学习的关键步骤。权重常通过**Xavier**或**He**初始化来打破对称性,适用于ReLU激活;而偏置通常初始化为0。初始化方法还包括**均匀分布**、**正态分布**、**全零**、**全一**和**固定值**。在PyTorch中,`torch.nn.init`模块提供了如`xavier_uniform_`和`kaiming_normal_`等初始化函数。预训练模型也可用于初始化,通过微调提升性能。
|
1月前
|
应用服务中间件 网络安全 数据安全/隐私保护
Sqlmap参数设置_sqlmap怎么指定参数(1),阿里面试100%会问到的网络安全
Sqlmap参数设置_sqlmap怎么指定参数(1),阿里面试100%会问到的网络安全
|
1月前
|
监控 Java 数据库连接
【后台开发】TinyWebser学习笔记(1)网络编程基础知识
【后台开发】TinyWebser学习笔记(1)网络编程基础知识
34 3
|
29天前
|
存储 安全 API
网络安全与信息安全:防御前线的关键技术深入理解RESTful API设计原则与实践
【5月更文挑战第30天】在数字化时代,网络安全和信息安全已成为维系信息社会运行的核心支柱。本文深入探讨了网络安全漏洞的概念、加密技术的进展以及提升安全意识的重要性。通过对这些领域的分析,旨在为读者提供一个关于如何保护个人和组织资产免遭网络威胁的综合性视角。 【5月更文挑战第30天】 在现代Web服务开发领域,表述性状态传递(REST)已成为构建后端API的一种流行且成熟的架构风格。本文将探讨RESTful API的核心设计原则,并通过实例分析如何将这些原则应用于实际开发中。我们将重点讨论资源的概念化、HTTP方法的正确使用、状态码的准确传达以及API的可扩展性和版本控制问题。通过本文,读者将
|
29天前
|
网络协议 网络安全
在Windos Server 2016 版本配置网络参数和接入工作组网络
在Windos Server 2016 版本配置网络参数和接入工作组网络
|
1月前
|
网络协议 Docker 容器
Ubantu docker学习笔记(七)容器网络
Ubantu docker学习笔记(七)容器网络

热门文章

最新文章