keras非線性回歸實現

2021-09-28 11:17:26 字數 1904 閱讀 6697

這次非線性回歸實現,相比較於線性回歸,多新增了隱藏層層數,並且需要使用不同型別的啟用函式來進行適應非線性,分別使用了tanh和relu來顯示結果

#非線性回歸

import keras

import numpy as np

import matplotlib.pyplot as plt

#按順序構成的模型

from keras.models import sequential

from keras.layers import dense,activation

from keras.optimizers import sgd

#生成資料,使用numpy生成200個隨機點

x_data = np.linspace(

-0.5

,0.5

,200

)noise = np.random.normal(0,

0.02

,x_data.shape)

y_data = np.square(x_data)

+ noise

#構建乙個順序模型

model = sequential(

)#在模型中新增乙個全連線層

#在非線性回歸中使用新增隱藏層的方法來達到非線性的目的

#1-10-1的神經網路,並且在新增的隱藏層時需要修改啟用函式,因為預設是如果沒有設定啟用函式,那麼就預設為線性的,即linear

model.add(dense(units =

10,input_dim =

1, activation=

'relu'))

#如果不加啟用函式,那麼輸出為一條直線,加入後為曲線

#model.add(activation('tanh'))

#後面新增層不需要設定輸入維度

model.add(dense(units =

1, activation=

'relu'))

#model.add(activation('tanh'))

#定義優化演算法

sgd = sgd(lr =

0.3)

#sgd(stochastic gradient) 隨機分布下降法(預設優化演算法,學習率很小,需要迭代次數較多)

#mse(mean squared error):均方誤差

model.

compile

(optimizer = sgd, loss =

'mse'

)#訓練3001個批次

for step in

range

(5001):

#每次訓練乙個批次

cost = model.train_on_batch(x_data, y_data)

#每500個batch列印一次cost值

if step %

500==0:

print

('cost:'

,cost)

#把x_data輸入網路中,得到**值

y_pred = model.predict(x_data)

#顯示隨機點

plt.scatter(x_data,y_data)

#顯示**結果

plt.plot(x_data, y_pred,

'r-'

,lw =3)

plt.show(

)

tanh結果:

relu結果:可以看到,結果比較怪異,但這只是使用啟用函式的一種嘗試

Keras 實現非線性回歸

import keras import numpy as np import matplotlib.pyplot as plt sequential按順序構成的模型 from keras.models import sequential dense全連線層 from keras.layers imp...

Keras框架作線性回歸和非線性回歸

import keras import numpy as np import matplotlib.pyplot as plt 按順序構成的模型 from keras.models import sequential dense全連線層 from keras.layers import dense ...

keras速度複習 非線性回歸

import keras import numpy as np import matplotlib.pyplot as plt from keras.models import sequential from keras.layers import dense,activation 啟用函式 fro...