• (二) Keras 非线性回归


    视频学习来源

    https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553

    笔记


    Keras 非线性回归


    import keras
    
    import numpy as np
    
    import matplotlib.pyplot as plt
    
    #Sequential按序列构成的模型
    
    from keras.models import Sequential
    
    #Dense全连接层
    
    from keras.layers import Dense



    #使用numpy生成200个随机点
    
    x_data=np.linspace(-0.5,0.5,200)  #均匀分布
    
    noise=np.random.normal(0,0.02,x_data.shape)  #均值为0,方差为0.02
    
    y_data=np.square(x_data)+noise
    
    #显示随机点
    
    plt.scatter(x_data,y_data)
    
    plt.show()

    clip_image002

    #构建一个顺序模型
    model=Sequential()
    #在模型中添加一个全连接层
    model.add(Dense(units=1,input_dim=1))
    
    #sgd:stochastic gradient descent 随机梯度下降算法
    #mse:mean square error 均方误差
    model.compile(optimizer='sgd',loss='mse')
    
    #训练3000次
    for step in range(3000):
        #每次训练一个批次
        cost=model.train_on_batch(x_data,y_data)
        #每500个batch打印一次cost值
        if step%500==0:
            print('cost:',cost)
            
    #x_data输入网络中,得到预测值y_pred
    y_pred=model.predict(x_data)
    
    #显示随机点
    plt.scatter(x_data,y_data)
    #显示预测结果
    plt.plot(x_data,y_pred,'r-',lw=3)
    plt.show()


    cost: 0.018438313

    cost: 0.006655791

    cost: 0.0058503654

    cost: 0.0057009794

    cost: 0.0056732716

    cost: 0.005668133

    clip_image004



    加入隐藏层


    #导入SGD,(后面要修改SGD的值)
    from keras.optimizers import SGD
    #构建一个顺序模型
    model=Sequential()
    #在模型中添加  1-10-1  ,一个输入,一个输出,中间10个隐藏层
    model.add(Dense(units=10,input_dim=1))   #1-10部分
    model.add(Dense(units=1)) #10-1部分 等效 model.add(Dense(units=1,input_dim=10))
    
    
    #增大sgd算法的学习率,默认值为0.01,
    #查看函数默认值可在jupyter中shift+Tab+Tab,前提是已经导入
    sgd=SGD(lr=0.3)   #学习速率0.3
    
    
    #sgd:stochastic gradient descent 随机梯度下降算法
    #mse:mean square error 均方误差
    model.compile(optimizer=sgd,loss='mse')   #和上面不同的是没有引号
    
    #训练3000次
    for step in range(3000):
        #每次训练一个批次
        cost=model.train_on_batch(x_data,y_data)
        #每500个batch打印一次cost值
        if step%500==0:
            print('cost:',cost)
            
    #x_data输入网络中,得到预测值y_pred
    y_pred=model.predict(x_data)
    
    #显示随机点
    plt.scatter(x_data,y_data)
    #显示预测结果
    plt.plot(x_data,y_pred,'r-',lw=3)
    plt.show()

    cost: 0.1012776
    cost: 0.005666962
    cost: 0.005666963
    cost: 0.0056669624
    cost: 0.005666963
    cost: 0.005666963

    clip_image006



    设置激活函数


    #设置激活函数,默认的激活函数为none也就是输入=输出,线性
    from keras.layers import Dense,Activation




    #设置激活函数方式1
    #激活函数为tanh
    
    #构建一个顺序模型
    model=Sequential()
    #在模型中添加  1-10-1  ,一个输入,一个输出,中间10个隐藏层
    model.add(Dense(units=10,input_dim=1))   #1-10部分
    
    model.add(Activation('tanh'))  #双曲正切函数
    
    model.add(Dense(units=1)) #10-1部分 等效 model.add(Dense(units=1,input_dim=10))
    
    model.add(Activation('tanh'))  #双曲正切函数
    
    #增大sgd算法的学习率,默认值为0.01,
    #查看函数默认值可在jupyter中shift+Tab+Tab,前提是已经导入
    sgd=SGD(lr=0.3)   #学习速率0.3
    
    #sgd:stochastic gradient descent 随机梯度下降算法
    #mse:mean square error 均方误差
    model.compile(optimizer=sgd,loss='mse')   #和上面不同的是没有引号
    
    #训练3000次
    for step in range(3000):
        #每次训练一个批次
        cost=model.train_on_batch(x_data,y_data)
        #每500个batch打印一次cost值
        if step%500==0:
            print('cost:',cost)
            
    #x_data输入网络中,得到预测值y_pred
    y_pred=model.predict(x_data)
    
    #显示随机点
    plt.scatter(x_data,y_data)
    #显示预测结果
    plt.plot(x_data,y_pred,'r-',lw=3)
    plt.show()

    cost: 0.049393196
    cost: 0.003914159
    cost: 0.0011130853
    cost: 0.00090270495
    cost: 0.00040989672
    cost: 0.00045533947

    clip_image008


    #设置激活函数方式2
    #激活函数为relu
    
    #jupyter中 注释为 ctrl+/ 
    
    #构建一个顺序模型
    model=Sequential()
    #在模型中添加  1-10-1  ,一个输入,一个输出,中间10个隐藏层
    model.add(Dense(units=10,input_dim=1,activation='relu'))   #1-10部分  
    
    model.add(Dense(units=1,activation='relu'))#10-1部分 等效 model.add(Dense(units=1,input_dim=10))
    
    #增大sgd算法的学习率,默认值为0.01,
    #查看函数默认值可在jupyter中shift+Tab+Tab,前提是已经导入
    sgd=SGD(lr=0.3)   #学习速率0.3
    
    #sgd:stochastic gradient descent 随机梯度下降算法
    #mse:mean square error 均方误差
    model.compile(optimizer=sgd,loss='mse')   #和上面不同的是没有引号
    
    #训练3000次
    for step in range(3000):
        #每次训练一个批次
        cost=model.train_on_batch(x_data,y_data)
        #每500个batch打印一次cost值
        if step%500==0:
            print('cost:',cost)
            
    #x_data输入网络中,得到预测值y_pred
    y_pred=model.predict(x_data)
    
    #显示随机点
    plt.scatter(x_data,y_data)
    #显示预测结果
    plt.plot(x_data,y_pred,'r-',lw=3)
    plt.show()

    cost: 0.0066929995
    cost: 0.0004892901
    cost: 0.00047061846
    cost: 0.00046780292
    cost: 0.00046706214
    cost: 0.00046700903

    clip_image010



    shift+Tab+Tab 效果如下

    clip_image012

  • 相关阅读:
    .NET实现Excel文件的读写 未测试
    权限管理设计
    struts1中配置应用
    POJ 2139 Six Degrees of Cowvin Bacon(floyd)
    POJ 1751 Highways
    POJ 1698 Alice's Chance
    POJ 1018 Communication System
    POJ 1050 To the Max
    POJ 1002 4873279
    POJ 3084 Panic Room
  • 原文地址:https://www.cnblogs.com/XUEYEYU/p/keras-learning-2.html
Copyright © 2020-2023  润新知