(二) 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM