BP神經網絡回歸的三種python實現


BP神經網絡回歸的三種python實現

前言

BP神經網絡(Back Propagation)是基於誤差反向傳播算法訓練的多層前饋網絡,能學習存儲大量的輸入-輸出模式映射關系。它的優化方法是使用梯度下降法,通過反向傳播來不斷調整網絡的權值和閾值,使網絡誤差平方和最小。其實際就是多層感知機,拓撲結構(單隱藏層)如下圖所示。

BP神經網絡與梯度下降法的關系

BP神經網絡用來計算損失函數相對於神經網絡參數的梯度,待求的是最小化損失函數的參數,是一種建模思想;而梯度下降法是一種優化算法,用於尋找最小化損失函數的參數。(https://www.zhihu.com/question/396352046)

三種實現

分別基於python-sklearn/pytorch/tf2.0實現BP神經網絡的多變量回歸模型。

模型的輸入是有着兩個自變量的二維數組(列=2),隨機生成一組正態分布的數組后,乘以權重w/b,然后再添加正態擾動,得到輸出值,最后將這兩個值進行回歸分析。

這里建立的BP模型的隱藏層神經元個數分別為10-4-1,共有4層網絡。

1. sklearn

​ BP神經網絡在sklearn中的api如下:

MLPRegressor(hidden_layer_sizes=100, activation='relu', *, solver='adam', alpha=0.0001, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, power_t=0.5, max_iter=200, shuffle=True, random_state=None, tol=0.0001, verbose=False, warm_start=False, momentum=0.9, nesterovs_momentum=True, early_stopping=False, validation_fraction=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-08, n_iter_no_change=10, max_fun=15000)

2. pytorch

3. tf2.0

結果

模型的預測值網格與實際值對比圖如下,從上到下依次對應sklean/pytorch/tf2.0,R²均在0.99上下:

后記

  1. 三種api中,sklearn的最簡單易用,但也最不靈活。pytorch、tf2.0雖然稍微復雜一點,但是對於網絡架構的設定和參數的調整都靈活許多,個人更傾向於sklearn + pytorch結合操作。
  2. pytorch/tf2.0的api中,learning rate的調整至關重要,不適合的lr會導致擬合效果很差。
  3. 以上是二元變量的回歸,也可以推廣至多元變量的回歸中,但隱藏層和lr的設定需要慢慢去調整。
  4. 數組構造部分,如np.random.uniform()在torch(torch.Tensor(num, 2).uniform_(-10,10))和tf2.0(tf.random.uniform())中都有各自對應的api。建議使用這些api,如果使用numpy有時候會出現一些麻煩(如tf2.0)。


免責聲明!

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



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