zoukankan      html  css  js  c++  java
  • (二) 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

  • 相关阅读:
    公司初创期使用 PHP,为什么很多公司都会慢慢转型到 JAVA
    Firefox 如何对发送的参数进行调试
    Spring security CSRF 跨域访问限制问题
    IntelliJ IDEA 的 Maven 如何设置自动下载源代码和文档
    Spring 的 WebSecurityConfigurerAdapter 过滤器
    Java NIO Path 接口
    Joda-Time – 可用的时区列表
    JWT 如何解码和获得令牌失效的日期
    MySQL索引相关操作
    详细了解INNODB_TRX、INNODB_LOCKs、INNODB_LOCK_waits、PROCESSLIST表
  • 原文地址:https://www.cnblogs.com/XUEYEYU/p/keras-learning-2.html
Copyright © 2011-2022 走看看