避免过拟合:
1、增大数据集合 – 使用更多的数据,噪声点比减少(减少数据扰动所造成的影响)
2、减少数据特征 – 减少数据维度,高维空间密度小(减少模型复杂度)
3、正则化 / dropout / 数据增强 – 在缺少训练数据情况下
一、Dropout介绍:
训练时:随机人为丢弃一些神经单元
测试时:使用全部神经单元
原理:
1.取平均的作用:相同训练数据训练5个不同的神经网络,得到5个不同结果,此时可以采用“5个结果取平均值”或“多数取胜投票策略”决定最终结果。
2.减少神经元之间复杂的公适应关系:因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。
Tf2实例:
tf.keras.layers.Dropout(rate=0.8)
一般可以在Dense层之后添加Dropout层
二、正则化介绍:
L1-norm和 l2-norm中文称作 L1正则化 和 L2正则化,或者 L1范数 和 L2范数。
其中 w 就是线性变化中的参数。
对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。
Tf2实例:
# kernel_regularizer 计算的就是层参数的相应值(l1、l2等)tf.keras.layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l2(1e-2))
tf.keras.layers.Dense(10, kernel_regularizer=tf.keras.regularizers.l1(1e-2))# 通过模型的lossed属性取到各个层的loss (最后加到损失函数计算的loss之中就行)
model.losses
# [<tf.Tensor: id=241, shape=(), dtype=float32, numpy=0.030209353>,
# <tf.Tensor: id=249, shape=(), dtype=float32, numpy=0.6088533>]