• 7.正则化应用


    一、正则化的应用

    6.Dropout应用中的未使用Dropout的代码的网络模型构建中添加正则化。
    将6.Dropout应用中的

    # 创建模型 输入784个神经元,输出10个神经元
    model = Sequential([
            # 定义输出是200 输入是784,设置偏置为1,添加softmax激活函数 第一个隐藏层有200个神经元
            Dense(units=200,input_dim=784,bias_initializer='one',activation="tanh"),
            # 第二个隐藏层有 100个神经元
            Dense(units=100,bias_initializer='one',activation="tanh"),
            Dense(units=10,bias_initializer='one',activation="softmax")
    ])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    修改为

    # 创建模型 输入784个神经元,输出10个神经元
    model = Sequential([
            # 定义输出是200 输入是784,设置偏置为1,添加softmax激活函数 第一个隐藏层有200个神经元
            Dense(units=200,input_dim=784,bias_initializer='one',activation="tanh",kernel_regularizer=l2(0.0003)),
            # 第二个隐藏层有 100个神经元
            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))
    ])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用l2正则化之前需要先导入from keras.regularizers import l2
    运行结果:
    在这里插入图片描述
    从运行结果可以看出来明显克服了一些过拟合的情况,模型对于数据集不是很复杂,加上正则化的话,它的效果可能就不是很好。

    完整代码

    代码运行平台为jupyter-notebook,文章中的代码块,也是按照jupyter-notebook中的划分顺序进行书写的,运行文章代码,直接分单元粘入到jupyter-notebook即可。
    1.导入第三方库

    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 tensorflow.keras.optimizers import SGD
    from keras.regularizers import l2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.加载数据及数据预处理

    # 载入数据
    (x_train,y_train),(x_test,y_test) = mnist.load_data()
    #  (60000, 28, 28)
    print("x_shape:\n",x_train.shape)
    # (60000,)  还未进行one-hot编码 需要后面自己操作
    print("y_shape:\n",y_train.shape)
    # (60000, 28, 28) -> (60000,784)  reshape()中参数填入-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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.训练模型

    # 创建模型 输入784个神经元,输出10个神经元
    model = Sequential([
            # 定义输出是200 输入是784,设置偏置为1,添加softmax激活函数 第一个隐藏层有200个神经元
            Dense(units=200,input_dim=784,bias_initializer='one',activation="tanh",kernel_regularizer=l2(0.0003)),
            # 第二个隐藏层有 100个神经元
            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和准确率
    loss,accuracy = model.evaluate(x_test,y_test)
    print("\ntest loss",loss)
    print("test_accuracy:",accuracy)
    
    # 训练集的loss和准确率
    loss,accuracy = model.evaluate(x_train,y_train)
    print("\ntrain loss",loss)
    print("train_accuracy:",accuracy)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    target is not existed: .page-component__scroll .el-scrollbar__wrap
    记一次路由器频繁掉线问题的分析、解决与发展
    使用Golang与Web3.js进行区块链开发
    Springboot导出Excel,支持大数据量
    springboot整合logback
    图像识别-YOLO V8安装部署-window-CPU-Pycharm
    Hypermesh三维网格划分技能,以汽车发动机连杆结构为例
    【ffmpeg】音频编码原理
    弘辽科技:网店提升销量先提升流量吗?怎么提升流量?
    【毕业设计】深度学习YOLO抽烟行为检测 - python opencv
  • 原文地址:https://blog.csdn.net/booze_/article/details/125633759