文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

终于把神经网络中的正则化技术搞懂了!!

2024-11-29 18:24

关注

今天给大家分享神经网络中常用的正则化技术。

神经网络中的正则化技术是用于防止模型过拟合的一系列方法

过拟合通常发生在模型在训练数据上表现得很好,但在测试数据上表现不佳,这意味着模型在训练过程中学习到了数据中的噪声或细节,而非通用的模式。

神经网络中常用的正则化技术包括

早停法

早停法是一种简单但非常有效的正则化技术。

模型在训练过程中会定期在验证集上进行评估,如果验证集上的损失开始增大(即验证集的性能变差),则认为模型可能已经过拟合。

早停法会在验证损失不再下降时停止训练,以防止模型继续在训练集上过度拟合。

import tensorflow as tf

# Creating a simple neural network model
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(64, activatinotallow='relu', input_shape=(100,)),
    tf.keras.layers.Dense(32, activatinotallow='relu'),
    tf.keras.layers.Dense(1, activatinotallow='sigmoid')
])

# Compile the model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# Using EarlyStopping callback
early_stopping = tf.keras.callbacks.EarlyStopping(
    mnotallow='val_loss',  # Monitoring validation loss
    patience=5,  # Number of epochs with no improvement to wait before stopping
    restore_best_weights=True  # Restores the weights of the best epoch
)

# Train the model with early stopping
model.fit(X_train, y_train, validation_split=0.2, epochs=100, callbacks=[early_stopping])

L1 和 L2 正则化

L1正则化

import tensorflow as tf
from tensorflow.keras import regularizers

# Creating a simple neural network model with L1 regularization
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(64, activation='relu', input_shape=(100,),
                          kernel_regularizer=regularizers.l1(0.01)),  # L1 Regularization
    tf.keras.layers.Dense(32, activation='relu',
                          kernel_regularizer=regularizers.l1(0.01)),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

# Compile the model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# Summary of the model
model.summary()

L2正则化

L2 正则化则在损失函数中加入权重平方和作为惩罚项,其公式为

正则化通过惩罚大权重的参数,迫使权重的分布更加均匀,防止模型对训练数据中的特定特征过于敏感。

它不会像L1那样产生稀疏解,但可以有效控制模型的复杂度。

import tensorflow as tf
from tensorflow.keras import regularizers

# Creating a neural network model with L2 regularization
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(64, activation='relu', input_shape=(100,),
                          kernel_regularizer=regularizers.l2(0.01)),  # L2 Regularization
    tf.keras.layers.Dense(32, activation='relu',
                          kernel_regularizer=regularizers.l2(0.01)),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

# Compile the model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# Summary of the model
model.summary()

Dropout

Dropout 是一种非常流行的正则化方法,尤其在深度神经网络中。

训练过程中,Dropout 随机地“关闭”一部分神经元及其连接,使得网络在每次训练迭代中只使用部分神经元进行前向传播和反向传播。

Dropout 可以防止神经元之间的共适应性,提高网络的泛化能力。

图片


import tensorflow as tf

# Creating a neural network model with Dropout
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(128, activatinotallow='relu', input_shape=(100,)),
    tf.keras.layers.Dropout(0.5),  # 50% Dropout
    tf.keras.layers.Dense(64, activatinotallow='relu'),
    tf.keras.layers.Dropout(0.5),  # 50% Dropout
    tf.keras.layers.Dense(10, activatinotallow='softmax')
])

# Compile the model
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Summary of the model
model.summary()

数据增强

数据增强是通过对训练数据进行一些随机变换(如旋转、翻转、缩放、裁剪等),人为地扩充数据集的规模,使模型能够看到更多的“不同”的数据,从而减少过拟合。

这些变换不会改变数据的标签,但会增加训练数据的多样性,迫使模型对不同的输入具有更强的鲁棒性。

图片


from tensorflow.keras.preprocessing.image import ImageDataGenerator

# Create an ImageDataGenerator with augmentation
datagen = ImageDataGenerator(
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest'
)

# Example of applying the augmentation to an image
# Assuming 'images' is a numpy array of images
augmented_images = datagen.flow(images, batch_size=32)

# Use the augmented data for training
model.fit(augmented_images, epochs=10)

添加噪声

在训练过程中,向输入或隐藏层的神经元加入随机噪声,以增强模型的鲁棒性。

例如,可以向输入数据中加入高斯噪声或其他分布的噪声。

这样模型可以在面对真实数据中的扰动或噪声时表现得更好,从而提升泛化能力。

图片


Batch Normalization

批归一化(Batch Normalization)也是一种广泛使用的正则化技术,它的主要目的是解决训练过程中的“内部协变量偏移”,即网络的每一层输入分布在训练过程中不断变化的问题。

BN 将每一批数据的输入进行归一化,使得输入数据的均值为0,方差为1,然后再对其进行缩放和平移:

来源:程序员学长内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯