TensorFlow--線性迴歸問題初步

主要學習了使用TensorFlow深度學習系統如何進行訓練數據以及預測數據:session

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
#導入對應的第三方庫
'''
線性迴歸實戰:TensorFlow

'''
#設置隨機種子
np.random.seed(5)


#直接採用np生成等差數列的方法,生成100個點,每一個點的取值在-1~1之間

#第一步:準備數據
x_data = np.linspace(-1,1,100)

# y = 2x+1+噪聲 ,其中,噪聲的維度與x_data一致

y_data = 2 * x_data + 1.0 + np.random.randn(*x_data.shape) * 0.4


#畫出隨機生成數據的散點圖
plt.scatter(x_data,y_data)
plt.show()

#畫出咱們想要學習到的線性函數y = 2x+1

plt.plot(x_data,2 * x_data + 1.0, color = 'red',linewidth = 3)

#顯示數據集的分佈
#plt.show()


#第二步:構建模型

#定義訓練數據的佔位符,x是特徵值,y是標籤值
x = tf.placeholder("float",name = "x")
y = tf.placeholder("float",name = "y")

#定義模型函數  w和b是模型真正的參數
def model(x,w,b):
    return tf.multiply(x,w) + b  #返回wx +b

#定義模型機構  TensorFlow的變量用來更新參數
'''
TensorFlow變量的聲明函數是tf.Variable
tf.Variable的做用是保存和更新參數
變量的初始值能夠是隨機數、常數,或是經過其餘變量的初始值計算獲得
'''

#構建線性函數的斜率,變量w
w = tf.Variable(1.0,name="w0")

#構建線性函數的截距,變量b
b = tf.Variable(0.0,name="b0")

#pred是預測值,前向計算
pred = model(x,w,b)


#第三步:訓練模型
#設置訓練參數

#迭代次數
train_epochs = 10

#學習率
learning_rate = 0.05

#定義損失函數
#採用均方差做爲損失函數
loss_function = tf.reduce_mean(tf.square(y-pred))

#選擇迭代器
#梯度降低優化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)


#聲明會話
sess = tf.Session()


#變量初始化
init = tf.global_variables_initializer()
sess.run(init)


#執行訓練
#開始訓練,輪數爲epoch,採用SGD隨機梯度降低優化方法
for epoch in range(train_epochs):
    for xs,ys in zip(x_data,y_data): #訓練100次
        _,loss = sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
    b0temp = b.eval(session = sess)
    w0temp = w.eval(session = sess)
    plt.plot(x_data,w0temp * x_data + b0temp)#畫圖
plt.show()

print("w:",sess.run(w))#w的值應該在2附近
print("b:",sess.run(b))#w的值應該在1附近


#第四步:進行預測
plt.scatter(x_data,y_data,label = 'Original data')
plt.plot(x_data,x_data * sess.run(w) + sess.run(b),label = 'Fitted line',color='r',linewidth = 3)
plt.legend(loc = 2) #經過參數loc指定圖例位置
plt.show()


x_test = 3.21

predict = sess.run(pred,feed_dict={x:x_test})
print("預測值:%f" % predict)

target = 2 * x_test + 1.0
print("目標值:%f" % target)

 

輸出結果:dom

 

這個階段:須要本身進行消化,多敲幾遍這個代碼,理解整個過程,爲後期的學習打好堅實的基礎。函數

相關文章
相關標籤/搜索