1. 程式人生 > >Tensorflow擬合函式:y=2x+3

Tensorflow擬合函式:y=2x+3

本文程式碼在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