获取更多的训练数据(数据增强)
使用几何变换的数据增强
诸如翻转(Flip),裁剪(Crop),旋转(Rotation)和移位(Translation)之类的几何变换是一些常用的数据增强技术。
基于GAN的数据增强
减少网络容量
防止过拟合最简单的方法是减少模型的大小,即模型中可学习参数的数量(由层的数量和每层的单位数量决定)。在深度学习中,模型中可学习参数的数量通常被称为模型的“容量”。从直觉上看,参数越多的模型“记忆能力”就越大,因此可以很容易地学习到训练样本与其目标之间完美的字典式映射,这种映射没有任何泛化能力。例如,一个有50万个二进制参数的模型可以很容易地学习MNIST训练集中每一个数字的类别:我们只需要为这5万个数字中的每个数字设置10个二进制参数。这种模型对于分类新的数字样本是无用的。
请永远记住这一点:深度学习模型往往善于拟合训练数据,但真正的挑战是泛化,而不是拟合。
另一方面,如果网络记忆有限资源,它将无法了解这种映射一样容易,因此,为了减少损失,它将不得不诉诸学习压缩表示,预测能力的目标,正是我们感兴趣的类型表示。同时,请记住,您应该使用具有足够参数的模型,它们不会不适合:您的模型不应该缺乏记忆资源。在“容量过多”和“容量不足”之间存在一种折中办法。
不幸的是,没有什么神奇的公式来决定什么是正确的层数,或什么是每个层的正确大小。您必须评估一系列不同的体系结构(在您的验证集中,而不是在您的测试集中),以便为您的数据找到合适的模型大小。寻找合适模型大小的一般流程是,从相对较少的层和参数开始,然后开始增加层的大小,或者添加新的层,直到您看到与验证损失有关的收益递减。
- 我们最初的网络是这样的:
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='relu'))
original_model.add(layers.Dense(1, activation='sigmoid'))
original_model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['acc'])