深度学习正则化

一、为什么需要正则化

当神经网络的层数和参数量增加时,模型容易出现过拟合的情况,即在训练集上的准确率高于在测试集上的准确率,导致模型泛化性能不佳。因此,需要使用正则化方法来缓解过拟合问题。

常见的正则化方法包括L1正则化和L2正则化。

import tensorflow as tf 
from tensorflow.keras import layers 

model = tf.keras.Sequential([
    # 添加一层L1正则化,指定正则化强度为0.01
    layers.Dense(64, activation='relu', kernel_regularizer=tf.keras.regularizers.l1(0.01)),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

二、L1正则化

L1正则化通过在损失函数中添加权重的绝对值之和来惩罚模型的复杂度,可以使得一部分权重变为0,从而实现特征选择的效果。

L1正则化的数学公式为:

Loss = 原始损失函数 + λ * ∥w∥1

其中λ为正则化强度,w为权重参数,∥w∥1为权重的L1范数。

import tensorflow as tf 
from tensorflow.keras import layers 

model = tf.keras.Sequential([
    # 添加一层L1正则化,指定正则化强度为0.01
    layers.Dense(64, activation='relu', kernel_regularizer=tf.keras.regularizers.l1(0.01)),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

三、L2正则化

L2正则化通过在损失函数中添加权重的平方和来惩罚模型的复杂度,可以使得所有权重都趋向于较小的值。

L2正则化的数学公式为:

Loss = 原始损失函数 + λ/2 * ∥w∥22

其中λ为正则化强度,w为权重参数,∥w∥2为权重的L2范数。

import tensorflow as tf 
from tensorflow.keras import layers 

model = tf.keras.Sequential([
    # 添加一层L2正则化,指定正则化强度为0.01
    layers.Dense(64, activation='relu', kernel_regularizer=tf.keras.regularizers.l2(0.01)),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

四、Dropout正则化

Dropout正则化是一种随机失活的方法,通过在训练过程中随机丢弃一部分神经元的输出来降低复杂度,从而缓解过拟合问题。

Dropout正则化的数学公式为:

Output = Dropout(Input, keep_prob)

其中Input为输入张量,keep_prob为保留概率,即留下的神经元输出的概率。

import tensorflow as tf 
from tensorflow.keras import layers 

model = tf.keras.Sequential([
    layers.Dense(64, activation='relu'),
    # 添加一层Dropout正则化,指定保留概率为0.5
    layers.Dropout(0.5),
    layers.Dense(64, activation='relu'),
    layers.Dropout(0.5),
    layers.Dense(10, activation='softmax')
])

五、BatchNormalization正则化

BatchNormalization正则化是通过对每一批样本的输出进行归一化来缓解过拟合问题,可以使得模型对输入数据的变化更加鲁棒,缩短训练时间。

BatchNormalization正则化的数学公式为:

Output = γ * (Input – μ) / σ + β

其中Input为输入张量,μ和σ为当前批次所有样本的均值和标准差,γ和β为可训练的缩放系数和平移系数。

import tensorflow as tf 
from tensorflow.keras import layers 

model = tf.keras.Sequential([
    layers.Dense(64, activation='relu'),
    # 添加一层BatchNormalization正则化
    layers.BatchNormalization(),
    layers.Dense(64, activation='relu'),
    layers.BatchNormalization(),
    layers.Dense(10, activation='softmax')
])

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/160926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-21 01:16
下一篇 2024-11-21 01:16

相关推荐

  • 深度查询宴会的文化起源

    深度查询宴会,是指通过对一种文化或主题的深度挖掘和探究,为参与者提供一次全方位的、深度体验式的文化品尝和交流活动。本文将从多个方面探讨深度查询宴会的文化起源。 一、宴会文化的起源 …

    编程 2025-04-29
  • Python下载深度解析

    Python作为一种强大的编程语言,在各种应用场景中都得到了广泛的应用。Python的安装和下载是使用Python的第一步,对这个过程的深入了解和掌握能够为使用Python提供更加…

    编程 2025-04-28
  • Python递归深度用法介绍

    Python中的递归函数是一个函数调用自身的过程。在进行递归调用时,程序需要为每个函数调用开辟一定的内存空间,这就是递归深度的概念。本文将从多个方面对Python递归深度进行详细阐…

    编程 2025-04-27
  • Spring Boot本地类和Jar包类加载顺序深度剖析

    本文将从多个方面对Spring Boot本地类和Jar包类加载顺序做详细的阐述,并给出相应的代码示例。 一、类加载机制概述 在介绍Spring Boot本地类和Jar包类加载顺序之…

    编程 2025-04-27
  • 深度解析Unity InjectFix

    Unity InjectFix是一个非常强大的工具,可以用于在Unity中修复各种类型的程序中的问题。 一、安装和使用Unity InjectFix 您可以通过Unity Asse…

    编程 2025-04-27
  • 深度剖析:cmd pip不是内部或外部命令

    一、问题背景 使用Python开发时,我们经常需要使用pip安装第三方库来实现项目需求。然而,在执行pip install命令时,有时会遇到“pip不是内部或外部命令”的错误提示,…

    编程 2025-04-25
  • 动手学深度学习 PyTorch

    一、基本介绍 深度学习是对人工神经网络的发展与应用。在人工神经网络中,神经元通过接受输入来生成输出。深度学习通常使用很多层神经元来构建模型,这样可以处理更加复杂的问题。PyTorc…

    编程 2025-04-25
  • 深度解析Ant Design中Table组件的使用

    一、Antd表格兼容 Antd是一个基于React的UI框架,Table组件是其重要的组成部分之一。该组件可在各种浏览器和设备上进行良好的兼容。同时,它还提供了多个版本的Antd框…

    编程 2025-04-25
  • 深度解析MySQL查看当前时间的用法

    MySQL是目前最流行的关系型数据库管理系统之一,其提供了多种方法用于查看当前时间。在本篇文章中,我们将从多个方面来介绍MySQL查看当前时间的用法。 一、当前时间的获取方法 My…

    编程 2025-04-24
  • 深入了解sed正则匹配

    一、sed 命令是什么 sed(stream editor)是一种非交互式流式文本编辑器。它用于对文本进行编辑、转换。sed 主要用于自动编辑。即通过脚本或命令直接对文本进行编辑。…

    编程 2025-04-24

发表回复

登录后才能评论