windows10 tensorflow(二)原理實戰之迴歸分析,深度

R-B發表於2021-09-09
 
TF基本原理與概念理解: 

模型:

一個簡單的線性迴歸y = W * x + b,採用numpy構建完整迴歸資料,並增加干擾噪聲

import numpy as np#建立一個一元線性迴歸方程y=0.1x1+0.3  ,同時一個正太分佈偏差np.random.normal(0.0,0.03)用於見證TF的演算法num_points=1000vectors_set=[]for  i in  range(num_points):
    x1=np.random.normal(loc=0.0,scale=0.66)
    y1=x1*0.1+0.3+np.random.normal(0.0,0.03)
    vectors_set.append([x1,y1])
x_data=[v[0] for v in vectors_set]
y_data=[v[1] for v in vectors_set]12345678910

Graphic display出資料分佈結果

import matplotlib.pyplot as plt#https://www.cnblogs.com/zqiguoshang/p/5744563.html##line_styles=['ro-','b^-','gs-','ro--','b^--','gs--']  #set line styleplt.plot(x_data,y_data,'ro',marker='^',c='blue',label='original_data')
plt.legend()
plt.show()123456

圖片描述 
透過TensorFlow程式碼找到最佳的引數W與b,使的輸入資料x_data,生成輸出資料y_data,本例中將會一條直線y_data=W*x_data+b。讀者知道W會接近0.1,b接近0.3,但是TensorFlow並不知道,它需要自己來計算得到該值。因此採用梯度下降法來迭代求解資料

import tensorflow as tf
import math#一、建立graph資料#隨便構建一個一元迴歸方程的引數W與bW=tf.Variable(tf.random_uniform([1], minval=-1.0, maxval=1.0))
b=tf.Variable(tf.zeros([1]))y=W*x_data+b#定義下面的最小化方差#1.定義最小化誤差平方根loss=tf.reduce_mean(tf.square(y-y_data))#2.learning_rate=0.5optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.5)#3.最最佳化最小值train=optimizer.minimize(loss)#二、初始化變數init=tf.global_variables_initializer()#三、啟動graphsess=tf.Session()
sess.run(init)

for step in range(8):
    sess.run(train)
    print("step={},sess.run=(W)={},sess.run(b)={}".format(step,sess.run(W),sess.run(b)))1234567891011121314151617181920212223242526

以下是迭代8次的結果。梯度就像一個指南針,指引我們朝著最小的方向前進。為了計算梯度,TensorFlow會對錯誤函式求導,在我們的例子中就是,演算法需要對W和b計算部分導數,以在每次迭代中為前進指明方向。 
圖片描述
下面是每次迭代的視覺化效果圖:

#Graphic display
    # print(sub_1+'41')
    #注意:各引數可以用逗號,分隔開。第一個引數代表子圖的行數;第二個引數代表該行影像的列數; 第三個引數代表每行的第幾個影像,從左致右,從上到下一次增加。
    plt.subplot(4,2,step+1)
    plt.plot(x_data,y_data,'ro')   
    plt.plot(x_data,sess.run(W)*x_data+
    sess.run(b),label=step)
    plt.legend()
plt.show()123456789

圖片描述




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4560/viewspace-2803283/,如需轉載,請註明出處,否則將追究法律責任。

相關文章