Tensorflow學習筆記:實現簡單的線性迴歸
阿新 • • 發佈:2019-01-02
#線性迴歸是什麼
y = w1x1 + w2x2 + w3x3 + w4x4 + ... + w_nx_n + bias
演算法:線性迴歸
策略:均方誤差
優化:梯度下降演算法(需要設定學習率)
#訓練過程
1、準備好特徵和目標值,例子用廣告投入與銷量之間的關係
這裡準備特徵值100個[100,1]
用y = x*0.7 + 0.8a計算出目標值[100,1]
2、建立模型(畫圖)
注:給n個特徵,那麼需要設定n個權重,一個偏置
這裡準備一個權重w,一個偏執b(隨機初始化)
3、求預測結果、計算損失
y_predict = x*w + b
損失函式loss = ((y1-y1')^2 + ... + (y100-y100')^2)/100
4、梯度下降減小損失,優化引數,指定學習率
#實現線性迴歸需要的API
矩陣相乘tf.matmul(x,w)
平方tf.square()
均值tf.reduce_mean()
梯度下降tf.train.GradientDescentOptimizer(learning_rate,method = minmum(loss),返回op
#模型引數必須用Varialbe定義
#梯度爆炸問題
1、重新設計網路
2、調整學習率
3、使用梯度截斷
4、使用啟用函式
#線性迴歸問題程式碼: def myregression(): """ 實現線性迴歸預測 return: None """ #1、準備好特徵和目標值 x = tf.random_normal([100,1],mean = 10,stddev = 2,name = 'input_data_x') y_true = tf.matmul(x,[[0.7]]) + 0.8 #2、建立迴歸模型,1個特徵,1個權重 w = tf.Variable(tf.random_normal([1,1],mean = 0.0,stddev = 1.0),name = 'weight') b = tf.Variable(0.0,name='bias') y_predict = tf.matmul(x,w) + b loss = tf.reduce_mean(tf.square(y_true-y_predict)) #4、梯度下降演算法優化損失 train_op = tf.train.GradientDescentOptimizer(0.006).minimize(loss) #定義變數初始化op init_op = tf.global_variables_initializer() tf.summary.histogram("input_x",x) merge_op = tf.summary.merge_all() #通過會話執行訓練過程 with tf.Session() as sess: #初始化變數 sess.run(init_op) for i in range(30000): sess.run(train_op) print("after %d times of training w&b is %f %f"%(i,w.eval(),b.eval())) import tensorflow as tf if __name__ == "__main__": myregression()
#經驗:
如果發生了梯度爆炸,即引數結果出現了nan,則是學習率太大,這時需要調整學習率;同時,資料的質量對結果的影響也很大