27 - Regularization

1个月前 59次点击 来自 TensorFlow

收录专题: TensorFlow入门笔记

解决过拟合的方法有以下几种:

  • 采用更多的数据
  • 迫使模型的复杂度降低(减少层数、正则化)
  • dropout(提高鲁棒性)
  • 提早结束训练过程
  • 数据增强

所谓正则化,即在损失函数的基础上加上一个范数,当加上L1范数时,被称为L1正则化,当加上L2范数时,被称为L2正则化

l2_model = keras.Sequential([
    keras.layers.Dense(16,kernal_regularizer=keras.regularizers.l2(0.001)),
    keras.layers.Dense(16,kernel_regularizer=keras.regularizers.l2(0.001)),
    keras.layers.Dense(1,activation=tf.nn.sigmoid)
])

更加灵活的添加方式如下:

for step,(x,y) in enumerate(db):
    with tf.GradientTape() as tape:
        # ……
        loss = tf.reduce_mean(tf.losses.categorical_crossentropy(y_onehot,out,from_logits=True))
        loss_regularization = []
        for p in network.trainable_variables:
            loss_regularization.append(tf.nn.l2_loss(p))
        loss_regularization = tf.reduce_sum(tf.stack(loss_regularization))
        loss = loss +0.0001 * loss_regularization
        
    grad = tape.gradient(loss,network.trainable_variables)
    optimizer.apply_gradients(zip(grad,network.trainable_variables))
Card image cap
开发者雷

尘世间一个小小的开发者,每天增加一些无聊的知识,就不会无聊了

要加油~~~

技术文档 >> 系列应用 >>
热推应用
Let'sLearnSwift
学习Swift的入门教程
PyPie
Python is as good as Pie
标签