CNN--Keras入門之線性迴歸與非線性迴歸

引言:

1.
我所用的python編譯器爲:Jupyter。
介紹
Jupyter Notebook是Ipython的升級版,是一個Web應用程序,直接在在瀏覽器上編寫,運行。特別輕量、界面優雅、十分方便。
界面如下:
在這裏插入圖片描述
安裝與使用:
pip install jupyter
在終端打開(打開後直接在瀏覽器編寫):
jupyter notebook
快捷鍵:
Shift+Tab 將光標移到參數位置連擊倆下Shift+Tab可查看方法說明
示例如下:
在這裏插入圖片描述

具體可參考:
https://jupyter.org/
https://www.jianshu.com/p/f3c3dd636b8a
2.
我剛剛開始學keras,以下內容只是個人學習筆記,代碼註釋很詳細。想了解更多可看視頻:https://www.bilibili.com/video/av40787141?from=search&seid=14045366417315862159

一、線性迴歸:

import keras
import numpy as np
#繪圖包
import matplotlib.pyplot as plt
#Sequential按順序構成的模型
from keras.models import Sequential
#Dense全連接層
from keras.layers import Dense


#使用numpy生成100個隨機點
x_data=np.random.rand(100)
#生成與隨機點相同形狀的干擾點
noise=np.random.normal(0,0.01,x_data.shape)
#一次函數y=kx+b.    noise:干擾使之離散偏移
y_data=x_data*0.1+0.2+noise

#顯示隨機點
plt.scatter(x_data,y_data)
plt.show()

在這裏插入圖片描述

#構建一個順序模型
model=Sequential()
#在模型中添加一個全連接層   輸入維度和輸出維度都爲1
model.add(Dense(units=1,input_dim=1))

#設置學習過程
#sgd:隨機梯度下降法
#mse:均方誤差
#optimizer:優化器 學習率爲:0.01
#loss:計算損失
model.compile(optimizer='sgd',loss='mse')

#訓練3001個批次
for step in range(3001):
    #每次訓練一個批次    訓練模型
    cost=model.train_on_batch(x_data,y_data)
    #每500個batch打印一次cost值
    if step % 500==0:
        print('cost:',cost)
        
#打印權值和偏置值
W,b=model.layers[0].get_weights()
print('W:',W,'b',b)

#x_data輸入網絡中,得到預測值y_pred
y_pred=model.predict(x_data)
#顯示隨機點
plt.scatter(x_data,y_data)
#顯示預測的結果   用一條寬度爲3,顏色爲紅色的線顯示預測值
plt.plot(x_data,y_pred,'r-',lw=3)
plt.show()



在這裏插入圖片描述

二、非線性迴歸:

import keras
import numpy as np
#繪圖包
import matplotlib.pyplot as plt
#Sequential按順序構成的模型
from keras.models import Sequential
#Dense全連接層
from keras.layers import Dense,Activation
#導入新的SDG優化器
from keras.optimizers import SGD
#使用numpy生成-0.5~0.5區間內100個隨機點
x_data=np.linspace(-0.5,0.5,200)
#從正態(高斯)分佈中隨機抽取樣本生成與隨機點相同形狀的干擾點 
noise=np.random.normal(0,0.02,x_data.shape)
#二次函數:y=x~     noise:干擾使之離散偏移
y_data=np.square(x_data)+noise

#顯示隨機點
plt.scatter(x_data,y_data)
plt.show()

在這裏插入圖片描述

#構建一個順序模型
model=Sequential()
#在模型中添加一個全連接層   
#1-10-1    添加一個隱藏層(10個神經元)
model.add(Dense(units=10,input_dim=1))
#model.add(Dense(units=1,input_dim=10))
model.add(Dense(units=1))


#設置學習過程
#sgd:隨機梯度下降法
#mse:均方誤差
#optimizer:優化器 學習率爲:0.01
#loss:計算損失
#model.compile(optimizer='sgd',loss='mse')

#定義優化算法    之前SGD默認的學習率爲:0.01 對於這個迭代次數大概要幾萬次,而現在只有3000次,所以要加大學習率
sgd=SGD(lr=0.3)
model.compile(optimizer=sgd,loss='mse')

#訓練3001個批次
for step in range(3001):
    #每次訓練一個批次    訓練模型
    cost=model.train_on_batch(x_data,y_data)
    #每500個batch打印一次cost值
    if step % 500==0:
        print('cost:',cost)
        
#打印權值和偏置值
W,b=model.layers[0].get_weights()
print('W:',W,'b:',b)

#x_data輸入網絡中,得到預測值y_pred
y_pred=model.predict(x_data)
#顯示隨機點
plt.scatter(x_data,y_data)
#顯示預測的結果   用一條寬度爲3,顏色爲紅色的線顯示預測值
plt.plot(x_data,y_pred,'r-',lw=3)
plt.show()

在這裏插入圖片描述

#上默認沒有激活函數( activation=None,),那只是線性的    所以要添加激活函數



#構建一個順序模型
model=Sequential()
#在模型中添加一個全連接層   
#1-10-1    添加一個隱藏層(10個神經元)
model.add(Dense(units=10,input_dim=1))
#添加激活函數tanh   tanh在大多數情況下比sigomid函數好用
model.add(Activation('tanh'))
#model.add(Dense(units=1,input_dim=10))
model.add(Dense(units=1))
model.add(Activation('tanh'))


#設置學習過程
#sgd:隨機梯度下降法
#mse:均方誤差
#optimizer:優化器 學習率爲:0.01
#loss:計算損失
#model.compile(optimizer='sgd',loss='mse')

#定義優化算法    之前SGD默認的學習率爲:0.01 對於這個迭代次數大概要幾萬次,而現在只有3000次,所以要加大學習率
sgd=SGD(lr=0.3)
model.compile(optimizer=sgd,loss='mse')

#訓練3001個批次
for step in range(3001):
    #每次訓練一個批次    訓練模型
    cost=model.train_on_batch(x_data,y_data)
    #每500個batch打印一次cost值
    if step % 500==0:
        print('cost:',cost)
        
#打印權值和偏置值
W,b=model.layers[0].get_weights()
print('W:',W,'b:',b)

#x_data輸入網絡中,得到預測值y_pred
y_pred=model.predict(x_data)
#顯示隨機點
plt.scatter(x_data,y_data)
#顯示預測的結果   用一條寬度爲3,顏色爲紅色的線顯示預測值
plt.plot(x_data,y_pred,'r-',lw=3)
plt.show()

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章