Keras教学(7):Keras的正则化Regularizers,看这一篇就够了

本文介绍了Keras中正则化的概念及应用,包括L1、L2正则化及自定义正则化器的实现。通过实例展示了如何在神经网络中引入正则化以防止过拟合。

【写在前面】:大家好,我是【猪葛】
一个很看好AI前景的算法工程师
在接下来的系列博客里面我会持续更新Keras的教学内容(文末有大纲)
内容主要分为两部分
第一部分是Keras的基础知识
第二部分是使用Keras搭建FasterCNN、YOLO目标检测神经网络
代码复用性高
如果你也感兴趣,欢迎关注我的动态一起学习
学习建议:
有些内容一开始学起来有点蒙,对照着“学习目标”去学习即可
一步一个脚印,走到山顶再往下看一切风景就全明了了



本篇博客学习目标:1、掌握正则化的用法









一、正则化Regularizers

1-1、正则化器的概念

正则化器允许在优化过程中对层的参数或层的激活情况进行惩罚。 网络优化的损失函数也包括这些惩罚项。

惩罚是以层为对象进行的。具体的 API 因层而异,但 Dense,Conv1D,Conv2D 和 Conv3D 这些层具有统一的 API。

正则化器开放 3 个关键字参数:

  • kernel_regularizer: keras.regularizers.Regularizer 的实例,不能传递名字字符串
  • bias_regularizer: keras.regularizers.Regularizer 的实例,不能传递名字字符串
  • activity_regularizer: keras.regularizers.Regularizer 的实例,不能传递名字字符串

1-2、正则化器的使用

正则化器的使用跟初始化器的使用方法一模一样,在这不赘述。欢迎点击:【Keras教学(6)】卷积神经网络的初始化,看这一篇就够了。自行查看。

唯一不一样的是,正则化使用的是正则化器,初始化使用的是初始化器。

1-3、可用的正则化

<think>我们正在使用TensorFlow.NET的Keras Functional API构建模型,并希望添加正则化。 根据引用[2],TensorFlow.NET 2.x推荐使用Keras进行模型搭建。在Keras中,我们可以通过向层添加`kernel_regularizer`、`bias_regularizer`或`activity_regularizer`参数来添加正则化。 步骤: 1. 导入必要的命名空间。 2. 创建正则化器(例如L1、L2或L1L2)。 3. 在构建层的时候,将正则化器传递给相应的参数。 示例: 假设我们要构建一个具有两个全连接层的模型,并在第一个全连接层的权重上使用L2正则化。 注意:在TensorFlow.NET中,我们使用`regularizers`命名空间下的正则化类。 具体代码步骤如下:</think>在 TensorFlow.NET 中使用 Keras Functional API 添加正则化的方法如下: ### 添加正则化的步骤 1. **导入正则化模块** 使用 `Tensorflow.Keras.Regularizers` 命名空间中的正则化器: ```csharp using static Tensorflow.Keras.Regularizers; ``` 2. **创建正则化器实例** 支持三种正则化类型: ```csharp // L1正则化 var l1_reg = L1(l1: 0.01f); // l1参数控制正则化强度 // L2正则化 var l2_reg = L2(l2: 0.02f); // l2参数控制正则化强度 // L1+L2组合 var l1l2_reg = L1L2(l1: 0.01f, l2: 0.02f); ``` 3. **在层中添加正则化** 通过层的 `kernel_regularizer` 或 `bias_regularizer` 参数应用: ```csharp // 在Dense层添加权重正则化 var inputs = keras.Input(shape: 784); var hidden = keras.layers.Dense( units: 64, activation: "relu", kernel_regularizer: l2_reg // 应用L2正则化 )(inputs); // 在卷积层添加偏置正则化 var conv = keras.layers.Conv2D( filters: 32, kernel_size: 3, bias_regularizer: l1_reg // 应用L1正则化 )(hidden); ``` 4. **完整模型示例** ```csharp // 创建L2正则化(λ=0.01) var reg = L2(0.01f); // 使用Functional API构建模型 var inputs = keras.Input(shape: 100); var x = keras.layers.Dense(64, activation: "relu", kernel_regularizer: reg)(inputs); var outputs = keras.layers.Dense(10, activation: "softmax")(x); var model = keras.Model(inputs, outputs); model.compile(optimizer: "adam", loss: "sparse_categorical_crossentropy"); ``` ### 关键说明 1. **正则化作用位置** - `kernel_regularizer`:作用于权重矩阵(主要使用) - `bias_regularizer`:作用于偏置向量 - `activity_regularizer`:作用于层输出(较少使用) 2. **强度参数选择** 典型值范围 $10^{-5}$ 到 $10^{-2}$,需通过交叉验证调整。例如: ```csharp L2(0.001f) // λ=0.001 ``` 3. **不同层的独立配置** 可对不同层使用不同正则化策略: ```csharp var dense1 = keras.layers.Dense(128, kernel_regularizer: L1(0.01f)); var dense2 = keras.layers.Dense(64, kernel_regularizer: L2(0.005f)); ``` ### 效果验证 正则化项会添加到损失函数中,训练时可观察总损失变化: $$总损失 = 数据损失 + \lambda \sum w_i^2 \quad (\text{L2正则化})$$ 通过 TensorBoard 可监控正则化对训练过程的影响。 > 提示:TensorFlow.NET 的 Keras API 实现了与 Python Keras 相同的正则化接口[^2][^3],文档可参考 [Keras 正则化文档](https://keras.io/api/layers/regularizers/)
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值