線性回歸
定義:權重($w$)與特徵的乘積相加之和
流程
- 準備數據(含有特徵值及目標值)
- 建立線性回歸模型
- 準備相對應特徵個數的權重變量(w)
- 建立一個偏置項(bias)變量
- 注意:權重(w)與偏置是在訓練過程中不斷改變的因此需用
tf.Variable()
來初始化並儲存
- 隨機初始化權重及偏置項
- 求損失值(loss):真實值與預測值之誤差(均方誤差)
- 優化損失的過程:梯度下降,指定學習率
- 模型中的參數(權重、偏置需用 變量(variable) 定義)
矩陣運算API
線性回歸最後的目標值(y_predict)應為
- 矩陣相乘時必須為二維(請注意寫入代碼時注意維度)
tf.matmul(a, b)
用於矩陣相乘
tf.square(x)
求平方值
tf.reduce_mean(input_tensor)
相加求均值
梯度下降API
使用tf.train.GradientDescentOptimizer(learning_rate)
完成梯度下降優化
- learning_rate:須手動指定一般介於0-1之間
- 返回一個梯度下降的op(於seesion中運行)
梯度下降op可調用的方法
minimize(loss)
:最小化損失loss
參數填入要最小化的損失函數
實現一個線性回歸
1 | import tensorflow as tf |
Result
1 | 起始初始化權重:1.111157, 初始化偏置:0.000000 |
學習率與步數的設置
學習率(learning_rate)
要是設置太大,會造成數值overload,跨過最小的loss值使得權重與偏置變得正負無窮大,稱之為梯度爆炸
- 在極端情況下,權重的值變得非常大,以至於溢出,導致
Nan
值解決梯度爆炸(深度神經網路,如RNN當中更容易出現)
- 重新設計網路
- 調整學習率
- 使用梯度截斷(在訓練過程中檢查和限制梯度的大小)
- 要是在學習的過程中發現速度過快,去抑制進行變化
- 使用激活函數
- 神經網路常用到
- 在極端情況下,權重的值變得非常大,以至於溢出,導致
要是設置過小,會造成損失函數很慢才會達到最小,使得學習的步數就必須增加