視頻學習來源
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()
#構建一個順序模型 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
加入隱藏層
#導入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
設置激活函數
#設置激活函數,默認的激活函數為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
#設置激活函數方式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
shift+Tab+Tab 效果如下