Tensorflow擬合函式:y=2x+3
阿新 • • 發佈:2019-01-14
本文程式碼在jupyter上實現
擬合一個一元一次函式:y=2x+3,具體要求如下:
1、使用Tensorflow框架
2、利用迭代方法,優化器不限
3、給出擬合的引數值
4、把擬合過程視覺化
1.匯入模組
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline #實現線上畫圖
2.視覺化構造資料
#構造訓練資料
x_data=np.random.rand(1000).astype(np.float) #隨機生成100個型別為float32的值
y_data=x_data*2+np.random.randn(*x_data.shape)*0.5+3 #定義方程式y=x_data*W+b
#視覺化
plt.figure()
plt.scatter(x_data,y_data)
plt.plot(x_data,3+2*x_data,'r')
3.構造損失函式
# 定義權重和偏置項
w = tf.Variable(1.0,name="w")
b = tf.Variable(0.2,name="b")
y = w*x_data+b
# 計算損失函式定義(均方差)
loss = tf.reduce_mean(tf.square(y -y_data))
4.開始訓練
# 設定學習速率為0.01,目的是減少loss到最小
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
sess=tf.Session()
sess.run(tf.global_variables_initializer())
#迭代1000次
for i in range(10000):
sess.run(train_step)
if i % 500 == 0 or i+1==10000:
plt.scatter(x_data,sess.run(w)*x_data+sess.run (b))
plt.plot(x_data,3+2*x_data,'r')
print("train_step{},w is {},b is {}".format(i, sess.run(w), sess.run(b)))
5.結果分析
迭代1000次過程中,w,b慢慢向損失函式最小靠近,根據結果可得i=7000以後,損失函式得到最小值,此時的w,b不在變化,所以得到的擬合x_data的最佳函式為y=wx+b,其中w=3.0804200172424316,b=1.976518154144287 。
以上過程第3步是核心,tf.Variable