4擬合線性函式的k和b

嘎痴嘎痴蹦蹦發表於2020-11-12
import tensorflow as tf
import numpy as np
 
#使用numpy生成100個隨機點
x_data=np.random.rand(100)
y_data=x_data*0.1+0.2   #這裡我們設定已知直線的k為0.1 b為0.2得到y_data
 
#構造一個線性模型
b=tf.Variable(0.)
k=tf.Variable(0.)
y=k*x_data+b
 
#二次代價函式(白話:兩數之差平方後取 平均值)
loss=tf.reduce_mean(tf.square(y_data-y))
#定義一個梯度下降法來進行訓練的優化器(optimizer其實就是按梯度下降的方法改變線性模型k和b的值,注意這裡的k和b一開始初始化都為0.0,後來慢慢向0.1、0.2靠近)
optimizer=tf.train.GradientDescentOptimizer(0.2)    #這裡的0.2是梯度下降的係數(學習率)也可以是0.3...
#最小化代價函式(訓練的方式就是使loss值最小,loss值可能是隨機初始化100個點與模型擬合出的100個點差的平方相加...等方法)
train=optimizer.minimize(loss)
 
#初始化變數
init=tf.global_variables_initializer()
 
with tf.Session() as sess:
    sess.run(init)
    #迭代,每次迭代run(train)即最小化loss
    for step in range(201):
        sess.run(train)
        if step%20==0:
            print(step,sess.run([k,b])) #這裡使用fetch的方式只是列印k、b的值,每20次列印一下,改變k、b的值是梯度下降優化器的工作
0 [0.054449033, 0.100353315]
20 [0.10394257, 0.19785142]
40 [0.102303684, 0.19874461]
60 [0.10134606, 0.19926646]
80 [0.100786515, 0.19957139]
100 [0.10045955, 0.19974957]
120 [0.10026849, 0.19985369]
140 [0.10015687, 0.19991452]
160 [0.10009168, 0.19995004]
180 [0.10005357, 0.1999708]
200 [0.10003129, 0.19998296]

該系列基礎例項參考視訊

相關文章