9.1 模型的容量
模型的容量或表达能力是指模型拟合复杂函数的能力。一种体现模型容量的指标为模型的假设空间大小,即模型可以表示的函数集的大小。
假设空间越大越完备,从假设空间中搜索出逼近真实模型的函数也就越有可能;反正,如果假设空间非常受限,就很难从中找到逼近真实模型的函数。
但是过大的假设空间会增加搜索难度和计算代价,在有限的计算资源的约束下,较大的假设空间并不一定能搜索出更好的函数模型。由于观测误差的存在,较大的假设空间中可能包含了大量表达能力过强的函数,能够将训练样本的观测误差也学习进来,从而伤害了模型的泛化能力。
9.2 过拟合与欠拟合
过拟合(训练集表现好,测试集表现不好):
当模型的容量过大时,网络模型除了学习到训练集数据的模态之外,还把额外的观测误差也学习进来,导致学习的模型在训练集上面表现较好,但是在未见的样本上表现不佳,也就是泛化能力偏弱。
欠拟合(训练集表现不好,测试集也表现不好):
当模型的容量过小时,模型不能够很好的学习到训练集数据的模态,导致训练集上表现不佳,同时在未见的样本上表现也不佳。
9.3 数据集划分
为了挑选模型超参数和检测过拟合现象,一般需要将原来的训练集再次切分为新的训练集和验证集,所以数据集分为:训练集,验证集,测试集三个子集。
训练集用于训练模型参数,测试集用于测试模型的泛化能力,测试集中的样本不能参与模型的训练,防止模型"记忆"住数据的特征,损害模型的泛化能力。
训练集和测试集采样自相同的数据分布。
当数据集偏小时,为了测试集能够比较准确地测试出模
型的泛化能力,可以适当增加测试集的比例。
验证集用于选择模型的超参数(称为模型选择),它的功能包括:
验证集的功能
9.7 数据增强
数据增强(Data Augmentation)是指在维持样本标签不变的条件下,根据先验知识改变样本的特征,使得新产生的样本也符合或者近似符合数据的真实分布。
对于图中的人物图片,旋转,缩放,平移,裁剪,改变视角,遮挡某局部区域都不会改变图片的类别标签,因此针对图片数据,可以有多种数据增强方式。
Tensorflow 中提供了常用图片的处理函数,位于 tf.image 子模块中。
tf.image.resize可以实现图片的缩放功能
我们将数据增强一般实现在预处理函数 prepocess 中。
9.7.1 旋转
tf.image.rot90(x,k=1)
逆时针将 x 选择 k 个90°。
9.7.2 翻转
图片的翻转分为沿水平轴翻转和竖直轴翻转。
在 TensorFlow 中,可以通过 tf.image.random_flip_left_right 和 tf.image.random_filp_up_down 实现。
9.7.3 裁剪
通过在原图的左右或者上下方向去掉部分边缘像素,可以保持图片主体不变,同时获得新的图片样本。
在实际裁剪时,一般先将图片缩放到略大于网络输入尺寸的大小,在进一步裁剪到合适大小。
e.g. 网络的输入大小为 224 x 224,那么我们先通过 resize 函数将图片缩放到 244 x 244 大小,再随机裁剪到 224 x 224 大小,利用tf.image.random_crop。
9.7.4 生成数据
通过生成模型在原有数据上学习到数据的分布,从而生成新的样本。
9.7.5 其他方式
添加高斯噪声,变换视角,随机擦除。
其他方式
其中两个防止过拟合的方法,因为我之前单独写过,所以不在这赘述,可以参考我之前写的文章,传送门如下:
参考资料:https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book
网友评论