TensorFlow構造簡單的線性迴歸模型
阿新 • • 發佈:2018-12-10
例項:構造線性迴歸模型
x = np.float32(np.random.normal(8, 10, [1,100]))//生成1行100列的隨機資料矩陣 y = 0.5*x + 1.2 + np.random.normal(0, 0.01)//計算對應的y值 w = tf.Variable(tf.zeros([1,1]))//初始化訓練的w b = tf.Variable(tf.zeros([1]))//初始化訓練的b loss = tf.reduce_mean(tf.square(pre_y - y));//構造損失函式:均方誤差 opt = tf.train.GradientDescentOptimizer(0.005)//使用優化方法:梯度下降優化 res = opt.minimize(loss)//使用優化方法:梯度下降法 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for step in range(0, 2001)://執行2001次訓練,2001是為輸出好看,可以輸出第2000次迭代 sess.run(res)//開始執行整個訓練邏輯 if step % 200 == 0: y__ = tf.matmul(w, x) + b//每200次迭代計算一次當前的輸出y__和原始輸出y對比 plt.scatter(x, y, c='r') plt.scatter(x, sess.run(y__), c='g') plt.show() print(step,":", sess.run(w), sess.run(b))
在修改上面程式碼中各個引數的時候,發現了很多有趣的現象:
1)驗證了正態分佈:x用正態分佈產生,均值是8,方差決定了x在8周圍取值的聚集程度
2)y的公式和x的均值,影響了梯度下降學習率,上面程式碼中實際斜率0.5,如果學習率太高,比如預設的0.5,會無法收斂,所以上面用了0.005
3)準備測試資料時,要注意w*x和b的差值,開始的時候我把x取均值0,方差0.1,結果b主導了y值,導致結果無法收斂