Dropout 与过拟合抑制 | 学习笔记

简介: 快速学习 Dropout 与过拟合抑制

开发者学堂课程【Tensorflow 2.0入门与实战Dropout与过拟合抑制】学习笔记,与课程紧密联系,让用户快速学习知识。

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


Dropout 与过拟合抑制


内容介绍:

一、 Dropout 如何抑制过拟合

二、 减小网络容量抑制过拟合


一、Dropout 如何抑制过拟合

如何在网络中添加 Dropout 层,使用已经建立好的 model

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'))

在其中插入 Dropout 层:

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.Dropout(0.5))

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

model.add(tf.keras.layers.Dropout(0.5))

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

model.add(tf.keras.layers.Dropout(0.5))

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

Dropout 中的参数 rate 是0-1之间的一个值,代表抛弃或丢弃掉多大部分的单元数,比如0.5,每次只激活50%,随机的丢弃掉50%,添加多个 Dropout 层效果会更好。

添加 Dropout 层之后,重新训练一下,

image.png

从正确率的变化中可以看出,因为 val_acc 的值高于 acc 的值,说明它没有过拟合。

image.png

loss 的变化情况所以添加 Dropout 层可以起到一定的抑制过拟合的效果。


二、减小网络容量抑制过拟合

添加 Dropout 层可以起到一定的抑制过拟合的效果,但是抑制过拟合的最好的方法是增加训练数据,第二个比较好的办法是减小网络的容量。

减小网络的容量,使用小型网络会迫使网络学习最关键的数据,从而起到一定的抑制过拟合的效果。

model =tf.keras. Sequential()

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

model.add(tf.keras.layers. Dense(32,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))

看一下结果情况,这就是一个小型网络,从层数来讲,减了一层;从隐藏单元数来讲,只有32个隐藏单元数。

将其训练的过程可视化

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

这个小型网络在正确率上呈上升的趋势,说明这个模型训练10个 epoch 是不够的,再多训练几个,可能会达到比较好的结果。

所以减小网络规模,也是抑制过拟合的一种非常好的方法。

抑制过拟合的另一种方法是正则化,原理就是控制网络规模,控制参数的规模。

正则化在实际中应用不多。

相关文章
|
4月前
|
机器学习/深度学习
过拟合
【7月更文挑战第25天】过拟合。
76 2
|
5月前
|
机器学习/深度学习 算法
**反向传播算法**在多层神经网络训练中至关重要,它包括**前向传播**、**计算损失**、**反向传播误差**和**权重更新**。
【6月更文挑战第28天】**反向传播算法**在多层神经网络训练中至关重要,它包括**前向传播**、**计算损失**、**反向传播误差**和**权重更新**。数据从输入层流经隐藏层到输出层,计算预测值。接着,比较预测与真实值计算损失。然后,从输出层开始,利用链式法则反向计算误差和梯度,更新权重以减小损失。此过程迭代进行,直到损失收敛或达到训练次数,优化模型性能。反向传播实现了自动微分,使模型能适应训练数据并泛化到新数据。
64 2
|
机器学习/深度学习
【深度学习】实验13 使用Dropout抑制过拟合 2
【深度学习】实验13 使用Dropout抑制过拟合
46 0
|
机器学习/深度学习
【深度学习】实验13 使用Dropout抑制过拟合 1
【深度学习】实验13 使用Dropout抑制过拟合
91 0
|
机器学习/深度学习 并行计算 算法
激活函数Relu对精度和损失的影响研究
激活函数Relu对精度和损失的影响研究
140 0
|
机器学习/深度学习 人工智能 计算机视觉
改进Hinton的Dropout:可以用来减轻欠拟合了
改进Hinton的Dropout:可以用来减轻欠拟合了
|
机器学习/深度学习 数据可视化 计算机视觉
图像分类_03分类器及损失:线性分类+ SVM损失+Softmax 分类+交叉熵损失
解释:w的每⼀⾏都是其中⼀个类的分类器。这些数字的⼏何解释是,当我们改变w的⼀行时,像素空间中相应的线将以不同的⽅向旋转。⽽其中的偏置是为了让我们避免所有的分类器都过原点。
157 0
|
机器学习/深度学习 Python
神经网络中的损失函数正则化和 Dropout 并手写代码实现
神经网络中的损失函数正则化和 Dropout 并手写代码实现
182 0
神经网络中的损失函数正则化和 Dropout 并手写代码实现
|
机器学习/深度学习 人工智能 算法
dropout 算法是如何防止过拟合的
dropout在训练的过程中,可以很好的防止过拟合,是因为它可以随机性的让一些神经元不处于激活状态。