TensorFlow多層感知機函數逼近過程詳解


http://c.biancheng.net/view/1924.html

Hornik 等人的工作(http://www.cs.cmu.edu/~bhiksha/courses/deeplearning/Fall.2016/notes/Sonia_Hornik.pdf)證明了一句話,“只有一個隱藏層的多層前饋網絡足以逼近任何函數,同時還可以保證很高的精度和令人滿意的效果。”

本節將展示如何使用多層感知機(MLP)進行函數逼近,具體來說,是預測波士頓的房價。第2章使用回歸技術對房價進行預測,現在使用 MLP 完成相同的任務。

准備工作

對於函數逼近,這里的損失函數是 MSE。輸入應該歸一化,隱藏層是 ReLU,輸出層最好是 Sigmoid。

下面是如何使用 MLP 進行函數逼近的示例:

  1. 導入需要用到的模塊:sklearn,該模塊可以用來獲取數據集,預處理數據,並將其分成訓練集和測試集;pandas,可以用來分析數據集;matplotlib 和 seaborn 可以用來可視化:


     
  2. 加載數據集並創建 Pandas 數據幀來分析數據:


     
  3. 了解一些關於數據的細節:


     
    下表很好地描述了數據:
  4. 找到輸入的不同特征與輸出之間的關聯:


     
    以下是上述代碼的輸出:
  5. 從前面的代碼中,可以看到三個參數 RM、PTRATIO 和 LSTAT 在幅度上與輸出之間具有大於 0.5 的相關性。選擇它們進行訓練。將數據集分解為訓練數據集和測試數據集。使用 MinMaxScaler 來規范數據集。
    需要注意的一個重要變化是,由於神經網絡使用 Sigmoid 激活函數(Sigmoid 的輸出只能在 0~1 之間),所以還必須對目標值 Y 進行歸一化:


     
  6. 定義常量和超參數:


     
  7. 創建一個單隱藏層的多層感知機模型:


     
  8. 聲明訓練數據的占位符並定義損失和優化器:


     
  9. 執行計算圖:

解讀分析

在只有一個隱藏層的情況下,該模型在訓練數據集上預測房價的平均誤差為 0.0071。下圖顯示了房屋估價與實際價格的關系:



在這里,使用 TensorFlow 操作層(Contrib)來構建神經網絡層。這使得工作稍微容易一些,因為避免了分別為每層聲明權重和偏置。如果使用像 Keras 這樣的 API,工作可以進一步簡化。

下面是 Keras 中以 TensorFlow 作為后端的代碼:



前面的代碼給出了預測值和實際值之間的結果。可以看到,通過去除異常值(一些房屋價格與其他參數無關,比如最右邊的點),可以改善結果:



免責聲明!

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



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