什么是过拟合
所谓过拟合(over-fitting)其实就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。
举个例子:
现在我训练一个模型来识别狗狗,训练的数据恰好全是二哈的图片,结果多次迭代后把二哈的全部特点都识别成狗狗特有的了(比如二哈的颜色、和爱拆家的特点等)。这样如果我去识别一只金毛的时候则无法识别。这就是过拟合。 简单的一句话就是机器模型学到了太多不该学到的特点。
过拟合的原因
- 使用的模型比较复杂
- 有噪声存在
- 数据量有限
过拟合的危害
- 过拟合的模型可以看成是一种完全记忆式的模型,这种模型是无用的,因为它不能被一般化。
- 过拟合也可以看成一个过度复杂的模型,这种模型很容易去利用那些看似正确实则无用的(spurious)关系,这往往会误导最终的判断。
keras过拟合相关解决办法
1.缩小神经网络的规模
防止过拟合最简单的方法是缩小模型的规模:模型中的可学习的参数数量(由层数和每层节点数决定)。 在深度学习中,模型中参数的数量通常被称为模型的能力。 直观地说,拥有更多参数的模型具有更强的记忆能力,甚至可以可以轻松地学习训练样本与其目标之间的类似字典的完美对应关系 –一种没有任何泛化能力的对应。但是这样的模型对于分类新的数字样本却没用,新的样本无法在这个“字典”找到它对应的类别。 一定要记住这一点:深度学习模型倾向于适应训练数据,但真正的挑战是泛化,而不是只对训练集样本适用就OK。
另一方面,如果网络的记忆资源有限(即参数较少),就不能轻易学习这种映射;因此,为了最小化损失,它必须要压缩信息 – 保留最有用的信息。因此,请记住,模型应该有足够的参数。不幸的是,没有一个公式可以用来确定神经网络正确的层数和层数所含的正确的节点数。我们必须评估一系列不同的网络架构(当然,在我们的验证集上,而不是我们的测试集上),以便为我们的数据找到合适的模型。找到合适的模型大小的一般过程是从相对较少的隐藏层和节点开始,逐渐增加隐藏层的节点数或添加新的层,直到看到验证集损失下降。
让我们在电影评论分类网络上试试这个。原来的网络是下面显示的:
from keras import models
from keras import layers
original_model = models.Sequential()
original_model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
original_model.add(layers.Dense(16, activation=&#