1. 程式人生 > >TensorFlow構造簡單的線性迴歸模型

TensorFlow構造簡單的線性迴歸模型

例項:構造線性迴歸模型     

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值,導致結果無法收斂