TF2.0学习NOTE5: 探索解析 过拟合/欠拟合

对模型的训练的准确性, 会先达到峰值, 然后下降.
模型训练的目的: 使模型能够适用于大部分泛化测试数据, 并保持较高的准确率.

"名词解析"
"模型数据较少时, 使用正则化等技术, 限制了模型可以存储的信息的数据量和类型,如果网络只能记住少量模式,
 那么优化过程将迫使它专注于最突出的模式,这些模式有更好的泛化性"
1. 过拟合: 模型训练时间过长, 训练数据较少;
2. 欠拟合: 模型设置不够强大, 过度正则化以及无足够长时间训练模型;
3. 正则化: 向原始模型引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称;

1. 防止过度拟合的策略

  • 添加权重正则化

L1 正则化, 其中增加的成本与权重系数的绝对值成正比(即与权重的“L1范数”成正比).

L2 正则化, 其中增加的成本与权重系数值的平方成正比(即与权重的平方“L2范数”成正比)。L2正则化在神经网络中也称为权值衰减。不要让不同的名称迷惑你:权重衰减在数学上与L2正则化是完全相同的.

## 在tf.keras训练中, 将权重正则化实例作为关键字参数传递给层来添加权重正则化;

l2_model = keras.models.Sequential([
    keras.layers.Dense(16, kernel_regularizer=keras.regularizers.l2(0.001),
                       activation='relu', input_shape=(NUM_WORDS,)),
    keras.layers.Dense(16, kernel_regularizer=keras.regularizers.l2(0.001),
                       activation='relu'),
    keras.layers.Dense(1, activation='sigmoid')
])

"代码中的l2(0.001)表示: 该层的权重矩阵中的每个系数都会将0.001 * weight_coefficient_value**2添加到网络的总损失中"
  • 丢弃正则化Dropout
## 1. dropou会在每一层随机的丢弃一些单元, 且仅在训练期间使用, 不用于测试阶段;
## 2. 在训练时, 因为每一个特征都有被丢弃, 所以整个网络不会偏向于某个特征, 所以你能够起到减轻过拟合的作用;

dpt_model = keras.models.Sequential([
    keras.layers.Dense(16, activation='relu', input_shape=(NUM_WORDS,)),
    keras.layers.Dropout(0.5),  ## Dropout
    keras.layers.Dense(16, activation='relu'),
    keras.layers.Dropout(0.5),
    keras.layers.Dense(1, activation='sigmoid')
])

拓展: 还有两个重要的方法为: 数据增强和批量标准化

你可能感兴趣的:(机器学习)