1. 程式人生 > >Win10:tensorflow 學習筆記(1)

Win10:tensorflow 學習筆記(1)

目錄:

前言

經過前段時間的努力,已經在電腦上搭好了深度學習系統,接下來就要開始跑程式了,將AI落地了。
安裝win10下tensforlow 可以參照之前的例子:win10+gpu安裝
在使用gpu版本中一些特別的問題,可以參照這篇:win10+tensorflow+gpu
在執行過程中遇到的一些錯誤,可以參照這篇::tensorflow 錯誤
學習的結果要依靠輸出來檢驗。
環境還是得特別強調一下:
硬體:
華碩(ASUS) 飛行堡壘三代FX60VM GTX1060 15.6英寸遊戲膝上型電腦(i7-6700HQ 8G 128GSSD+1T FHD)黑色
軟體:
python 3.6:

下載
tensorflow 1.8.0 地址
cuda 9.0:下載
cudnn 7.1:下載

基本概念

要想流暢得使用tensorflow實現你的專案,必須要對一些基礎概念有很深入的理解。

tensorflow中的計算可以表示為一個計算圖,其中每一個運算操作將作為一個節點,節點與節點之間的連線稱為邊。這個計算圖描述了資料的計算流程,必須要好好理解這個概念,才能體會到這個計算模型的優越。
圖片
計算圖中每一個節點可以有任意多個輸入和任意多個輸出,每一個節點描述了一種運算操作,節點可以算是運算操作的例項化。在計算圖的邊中流動的資料被稱為張量,故得名tensorflow。session 是使用者使用tensorflow時的互動式介面。使用者可以通過Session的extend方法新增新的節點和邊,用以建立計算圖,然後就可以通過Session的Run方法執行計算圖:使用者給出需要計算的節點,同時提供輸入資料,Tensorflow就會自動尋找所有需要計算的節點並按依賴順序執行它們。
variables可以儲存張量,而其他張量則不會儲存。

實現原理

單機與分散式
這張圖很好的展示了,tensorflow的實現方式,高度抽象:
客戶端負責與使用者互動。
master負責當客戶端與worker的中介
worker則負責排程具體的硬體實現計算。
在只有一個硬體裝置的情況下,計算圖會按照依賴關係被順序執行。 當一個節點的所有上游依賴都被執行完時(依賴數減為0),這個節點就會被加入ready queue 以等待執行。同時他下游的所有節點的依賴數減1.
分散式的時候遇到的難題:
- 每一個節點該讓什麼裝置執行?
- 如何管理節點間的資料通訊。
1第一個問題,目前採用貪婪策略解決,未來希望使用強化學習。
2第二個問題,當給節點的分配方案確定時,整個計算圖就會被劃分為許多子圖,使用同一個裝置並且相鄰的節點會被劃分到同一個子圖。然後計算圖中從x到y的邊,會被取代為一個傳送端的傳送節點和一個接受端的接受節點,以及從傳送節點到接受節點的邊。
通訊機制


問題就這樣簡化了,機制很優秀。
cpu
這是cpu和gpu通訊的圖。

擴充套件功能

1自動求導

計算costfunction的梯度很關鍵,tensorflow支援自動求導,
比如一個tensor c在計算圖中有一組依賴的tensor{x},那麼在tensorflow中可以自動匯出{dc/dx}。這個求解過程在計算途中通過增加節點自動實現。
反向規則。
[db,dw,dx]=tf.gradients(C,[b,w,x]).

2單獨執行子圖

使用者可以選擇計算圖的任意子圖,並沿某些邊輸入資料,同時從另一些邊獲取輸出結果。Tensorflow用節點名加port的形式指定資料,例如bar:0表示名為bar的節點的第一個輸出。
同時,tensorflow會自動確定哪些節點應該被執行。

3計算圖的控制流

提供高階函式,例如merge和swith來進行控制流。

4檔案系統路徑

在分散式的時候,直接讀取本地檔案,而不是讀取異地檔案。

5佇列

tensorflow支援fifo佇列,也支援shuffling queue佇列進行排程,用以滿足要求。

6容器

每一個程序的預設容器會一直存在,直到程序結束,它可以幫助不同計算圖的會話分享狀態變數。管理長期變數的機制。

效能優化

1高階函式自動優化基本操作。
2任務排程優化,記憶體,cpu綜合考慮。
3支援優化庫。
4資料壓縮
5平行計算模式:1資料並行,模型並行,流水線並行。

尾聲:

學以致用,以學促用。
歡迎大家一起分享。