keras基础--6.正则化应用

本文介绍了一个使用Keras框架实现的手写数字识别系统。该系统通过加载MNIST数据集进行训练,并采用三层全连接神经网络模型。模型利用了tanh激活函数和softmax输出层,同时应用了L2正则化防止过拟合。通过SGD优化器进行训练,最终在测试集上达到了较高的识别精度。
import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
from keras.regularizers import l2

# 载入数据
(x_train,y_train),(x_test,y_test) = mnist.load_data()
#(60000,28,28)
print('x_shape:',x_train.shape)
#(60000)
print('y_shape:',y_train.shape)
#(60000,28,28)->(60000,784)
# -1的意思是可以取任何值,自动判断。/255.0是做归一化
x_train = x_train.reshape(x_train.shape[0],-1)/255.0 
x_test = x_test.reshape(x_test.shape[0],-1)/255.0
# 转换one-hot格式
y_train = np_utils.to_categorical(y_train,num_classes=10)
y_test = np_utils.to_categorical(y_test,num_classes=10)

#创建模型
model = Sequential([
    Dense(units=200,input_dim=784, ='one',activation='tanh',kernel_regularizer=l2(0.0003)),
    Dense(units=100,bias_initializer='one',activation='tanh',kernel_regularizer=l2(0.0003)),
    Dense(units=10,bias_initializer='one',activation='softmax',kernel_regularizer=l2(0.0003)) 
])

#定义优化器
sgd = SGD(lr=0.2)

#定义优化器,loss_function,训练过程中计算准确率
model.compile(
    optimizer = sgd,
    loss = 'categorical_crossentropy',
    metrics = ['accuracy'],
)

#训练模型
model.fit(x_train,y_train,batch_size=32,epochs=10)

#评估模型
loss,accuracy = model.evaluate(x_test,y_test)
print('\ntest loss',loss)
print('accuracy',accuracy)

loss,accuracy = model.evaluate(x_train,y_train)
print('train loss',loss)
print('train accuracy',accuracy)
在 TensorFlow/Keras 中使用 L2 正则化是一种常见的防止模型过拟合的方法,它通过向损失函数中添加权重的平方项来惩罚模型的复杂性。L2 正则化可以通过 `kernel_regularizer` 参数在层中直接应用。 以下是一个使用 L2 正则化示例: ```python from tensorflow.keras import layers, regularizers # 定义一个带有 L2 正则化的全连接层 dense_layer = layers.Dense( units=64, activation='relu', kernel_regularizer=regularizers.l2(0.001) # 0.001 是 L2 的正则化系数 ) ``` 在上述代码中,`regularizers.l2(0.001)` 指定了 L2 正则化的强度。数值越小,正则化的影响越弱,反之亦然。该正则化项会自动加入到模型的总损失中,训练过程中会一并优化。 此外,也可以在卷积层中使用 L2 正则化: ```python conv_layer = layers.Conv2D( filters=32, kernel_size=(3, 3), activation='relu', kernel_regularizer=regularizers.l2(0.001) ) ``` 如果需要对偏置项(bias)也应用正则化,可以使用 `bias_regularizer` 参数: ```python dense_layer_with_bias_regularizer = layers.Dense( units=64, activation='relu', kernel_regularizer=regularizers.l2(0.001), bias_regularizer=regularizers.l2(0.001) ) ``` 在实际应用中,L2 正则化可以结合其他技术(如 Dropout 或 Batch Normalization)一起使用,以进一步提高模型的泛化能力[^4]。 ### 注意事项 - L2 正则化系数需要根据具体任务进行调整,过大的值可能会导致欠拟合。 - 在稀疏输入场景下,某些实现(如 `tf.keras.optimizers.Ftrl`)支持对活跃权重进行 L2 收缩正则化[^1]。 - 如果使用自定义训练循环,需确保正则化损失被正确计算并加入总损失中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值