TensorFlow基本原理,入門教程網址

TensorFlow

TensorFlow™ 是一個採用數據流圖(data flow graphs),用於數值計算的開源軟件庫。
節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯繫的多維數據數組,即張量(tensor)。
它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),服務器,移動設備等等。
可用於機器學習和深度神經網絡方面的研究,但這個系統的通用性使其也可廣泛用於其他計算領域。
數據流圖(Data Flow Graph)
用“節點”(nodes)和“線”(edges)的有向圖來描述數學計算。
“節點” 一般用來表示施加的數學操作,也可表示數據輸入(feed in)的起點/輸出(push out)的終點,或讀取/寫入持久變量(persistent variable)的終點。
線”表示“節點”之間的輸入/輸出關係。這些數據“線”可以輸運“size可動態調整”的多維數據數組,即“張量”(tensor)。
張量從圖中流過的直觀圖像是這個工具取名爲“Tensorflow”的原因。
一旦輸入端的所有張量準備好,節點將被分配到各種計算設備完成異步並行地執行運算。
基本用法
一覽

使用 圖(Graph) 表示計算任務
在 會話(Session) 中執行圖
使用 tensor 表示數據
通過 變量(Variable) 維護狀態
使用 feed和fetch 進行賦值或取值

圖中的節點稱爲op(operation)

一個op獲得tensor(>=0個)進行計算,產生tensor(>=0個)
TensorFlow程序通常包括 構建階段 和 執行階段 
在構建階段,op的 執行步驟 被描述成圖
在執行階段,使用 會話 執行圖中的op
TensorFlow Python 庫有一個默認圖 (default graph), op 構造器可以爲其增加節點

進階

Python代碼的目的是用來 構建這個可以在外部運行的計算圖,以及 安排計算圖的哪一部分應該被運行。


http://tensorfly.cn/
github 地址 :

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/tutorials
;;
https://github.com/tensorflow/tensorflow/tree/r0.8/tensorflow/examples/tutorials


訓練模型

爲了訓練我們的模型,我們首先需要定義一個指標來評估這個模型是好的。其實,在機器學習,我們通常定義指標來表示一個模型是壞的,這個指標稱爲成本(cost)或損失(loss),然後儘量最小化這個指標。但是,這兩種方式是相同的。

一個非常常見的,非常漂亮的成本函數是“交叉熵”(cross-entropy)。交叉熵產生於信息論裏面的信息壓縮編碼技術,但是它後來演變成爲從博弈論到機器學習等其他領域裏的重要技術手段。它的定義如下:

y 是我們預測的概率分佈, y' 是實際的分佈(我們輸入的one-hot vector)。比較粗糙的理解是,交叉熵是用來衡量我們的預測用於描述真相的低效性。更詳細的關於交叉熵的解釋超出本教程的範疇,但是你很有必要好好理解它。

爲了計算交叉熵,我們首先需要添加一個新的佔位符用於輸入正確值:

y_ = tf.placeholder("float", [None,10])
然後我們可以用 計算交叉熵:

cross_entropy = -tf.reducesum(y*tf.log(y))
首先,用 tf.log 計算 y 的每個元素的對數。接下來,我們把 y 的每一個元素和 tf.log(y) 的對應元素相乘。最後,用 tf.reduce_sum 計算張量的所有元素的總和。(注意,這裏的交叉熵不僅僅用來衡量單一的一對預測和真實值,而是所有100幅圖片的交叉熵的總和。對於100個數據點的預測表現比單一數據點的表現能更好地描述我們的模型的性能。

現在我們知道我們需要我們的模型做什麼啦,用TensorFlow來訓練它是非常容易的。因爲TensorFlow擁有一張描述你各個計算單元的圖,它可以自動地使用反向傳播算法(backpropagation algorithm)來有效地確定你的變量是如何影響你想要最小化的那個成本值的。然後,TensorFlow會用你選擇的優化算法來不斷地修改變量以降低成本。

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
在這裏,我們要求TensorFlow用梯度下降算法(gradient descent algorithm)以0.01的學習速率最小化交叉熵。梯度下降算法(gradient descent algorithm)是一個簡單的學習過程,TensorFlow只需將每個變量一點點地往使成本不斷降低的方向移動。當然TensorFlow也提供了其他許多優化算法:只要簡單地調整一行代碼就可以使用其他的算法。


與分類問題不同,迴歸問題解決的是對具體數值的預測,eg:房價預測,銷量預測,流量預測等

均方誤差的定義:均方誤差

#y代表輸出答案,y_代表標準答案  
mse=tf.reduce_mean(tf.square(y_-y))

但在實際問題中往往均方誤差並不能很好的表達問題,比如預測銷量,賣衣服,貨物成本一件100元,商品利潤一件20。那此時多預測一個虧100,少預測一個少掙20。所以這裏面有一個權重在裏面,根據具體問題去定義偏向多進貨還是偏向少進貨。這時候往往需要根據實際問題在MSE的基礎上自定義損失函數。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章