線性迴歸-TensorFlow


#matplotlib inline
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"]=(14,8)#可視化的時候設置的長和寬
n_observations=100#樣本點的個數
xs=np.linspace(-3,3, n_observations)#在-3與3之間取得100個數。
ys=np.sin(xs)+np.random.uniform(-0.5,0.5, n_observations)#sin函數並加一些噪聲。
plt.scatter(xs,ys)#繪圖
plt.show()
X=tf.placeholder(tf.float32,name="X")
Y=tf.placeholder(tf.float32,name="Y")
W=tf.Variable(tf.random_normal([1]),name="weight")
b=tf.Variable(tf.random_normal([1]),name="bias")
Y_pred=tf.add(tf.multiply(X,W),b)
loss=tf.square(Y- Y_pred,name='loss')
learning_rate=0.01
optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
n_samples=xs.shape[0]
with  tf.Session()  as  sess:
     #初始化所有變量
     sess.run(tf.global_variables_initializer()) 
     writer=tf.summary.FileWriter('.graphs/linear_reg',sess.graph)
     #訓練模型
     for  i  in range(50):
         total_loss=0
         for  x,y  in zip(xs,ys):
            #通過feed_dict把數據裝進去, optimizer和loss爲兩個節點,但是我只要loss的輸出結果.
             o,l=sess.run([optimizer,loss],feed_dict={X:x,Y:y})  
            #計算所有樣本的損失
             total_loss+=l
       #每隔五次打印一次
         if (i%5==0):
             print("Epoch{0}:{1}".format(i , total_loss/ n_samples))
     writer.close()
             #取出w和b的值
     W,b=sess.run([W,b])
print("w:"+str(W[0]))  
print("b:"+str(b[0]))
plt.plot(xs,ys,label='Real data')
plt.plot(xs,xs*W+b,'r',label='Predicted data')
plt.legend()
plt.show()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章