1. 程式人生 > >TensorFlow三維平面擬合總結

TensorFlow三維平面擬合總結


這是自己學習TensorFlow時遇到的第一個例程,想著是能搞明白點,所以小結一下,以防自己忘記了。但是,確實有好多東西自己是將不明白的,所以這個也僅供參考。
(1)程式碼執行:
本人使用的python3版本,但是官方例程給的是python2的程式碼,所以在執行前需要進行修改:
程式碼中應該修改的地方:
for step in xrange(0, 201):  這是python2中的函式,在python3中xrange已經改成了range。
print step, sess.run(W), sess.run(b) 這也是python2中的內容。Python3中應該是print (step, sess.run(W), sess.run(b))
TensorFlow第一個例子說明:
(2)數學知識
平面的表示方法:(一般式)
Ax+By+Cz+D=0  
注:其中A,B,C,D為已知常數,並且A,B,C不同時為零。
所以程式中的x_data即可表示一個直角座標面中的一個點(x,z)。而經過方程y_data = np.dot([0.100, 0.200], x_data) + 0.300求出相應的第三個數值即可組成(x,y,z)且這裡所求的點均在平面y = np.dot([0.100, 0.200], x_data) + 0.300上。

(3)程式中所用到的函式
tf.random_uniform使用
tf.random_uniform((4, 4),minval=low,maxval=high,dtype=tf.float32)))返回4*4的矩陣,產生於low和high之間,產生資料的型別為32位浮點型,產生的值是均勻分佈的。
numpy.random.rand(d0, d1, …, dn)的隨機樣本位於[0, 1)中。
numpy.random.rand(2,100)返回一個2*100的矩陣,且所有資料均在[0,1)中。
tf.matmul()的使用方法
該函式的作用是實現兩個矩陣的相乘,運演算法則與矩陣相乘無異。
在tensorflow環境下執行輸入了一個數據a,再使用Matmul函式來計算矩陣a*a,但是在列印結果時出現的是:

tf.multiply()的使用方法
由於在深度學習中高頻率的用到這個函式,所以做一下記錄
format:multiply(x, y, name=None)
(注意,這裡強調了這兩個相乘的數x,y要有相同的資料型別,不然就會報錯)
Returns x * y element-wise. (這裡指multiply這個函式實現的是元素級別的相乘,也就是兩個相對應位置上的元素各自相乘,而不是矩陣乘法,注意和tf.matmul區別)


tf.reduce_mean
tensorflow中有一類在tensor的某一維度上求值的函式。
求平均值tf.reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None)
引數1--input_tensor:待求值的tensor。
引數2--reduction_indices:在哪一維上求解。
引數(3)(4)可忽略
舉例說明:
# 'x' is [[1., 2.]
 [3., 4.]]
x是一個2維陣列,分別呼叫reduce_*函式如下:
首先求平均值:
tf.reduce_mean(x) ==> 2.5 #如果不指定第二個引數,那麼就在所有的元素中取平均值 tf.reduce_mean(x, 0) ==> [2., 3.] #指定第二個引數為0,則第一維的元素取平均值,即每一列求平均值 tf.reduce_mean(x, 1) ==> [1.5, 3.5] #指定第二個引數為1,則第二維的元素取平均值,即每一行求平均值
Class GradientDescentOptimizer
Optimizer that implements the gradient descent algorithm.
實現梯度下降演算法的優化器。

Construct a new gradient descent optimizer.
構建一個新的漸變下降優化器。
learning_rate: A Tensor or a floating point value. The learning rate to use.  一個張量或者一個浮點值,學習效率。
use_locking: If True use locks for update operations.
use_locking:如果True用於更新操作的鎖定。
name: Optional name prefix for the operations created when applying gradients. Defaults to "GradientDescent".
名稱:應用漸變時建立的操作的可選名稱字首。 預設為“梯度下降”。

Variable的使用[這個理解起來有點難,需要之後不斷地思考]
tensorflow中很重要的一個部分就是Variable,它能構建一個變數,在計算圖的運算過程中,其值會一直儲存到程式執行結束,而一般的tensor張量在tensorflow執行過程中只是在計算圖中流過,並不會儲存下來,因此varibale主要用來儲存tensorflow構建的一些結構中的引數,這樣,這些引數才不會隨著運算的消失而消失,才能最終得到一個模型。比如神經網路中的權重和bias等,在訓練過後,總是希望這些引數能夠儲存下來,而不是直接就消失了,所以這個時候要用到Variable。注意,所有和varible有關的操作在計算的時候都要使用session會話來控制,包括計算,列印等等。



(4)訓練過程
給出一組基本的資料,計算出這組資料所在的平面,即分別計算出每組資料的第三個點。
再建立需要工作的線性模型、偏置值、權重引數等內容。
利用梯度下降演算法進行訓練,這點我也說不明白,但是可以參照反向傳播演算法進行理解,經過以上的幾步就把自己的神經網路建立起來了接下來就是啟動圖和開始訓練等操作。個人覺得從計算最小方差之後的程式碼用途就比較模糊了,建議不是很明白的去看看網路上反向傳播的相關內容。