亚洲精品国产一区二区在线-亚洲精品国产专区91在线-亚洲精品国产专区一区-亚洲精品国产字幕久久不卡-亚洲精品国产综合99久久一区

當前位置:首頁 > 工程資源 > 正文

架構圖還是構架圖?架構圖

  中生代技術第52期分享

  分享嘉賓:劉光聰

  中生小編預告:中生代技術年度大會上海站將在2017年3月11號舉行,請掃描下面二維碼關注中生代技術公眾號了解詳細信息。

中生代技術公眾號

  

  祝大家在2017年有新的收獲。非常感謝大家在春節前夕依然還堅持參加中生代技術的分享活動,也感謝中生代提供的強大的分享平臺。 我是劉光聰,來自于中興通訊技術規劃部,關注敏捷軟件開發,從事機器學習算法研究,目前負責AI平臺架構與設計。 今天我給大家分享的題目是:剖析TensorFlow架構與設計之編程模型。其目標是對深度學習有一個初步的了解,了解TensorFlow的基本編程模型,及其掌握TensorFlow的幾個重要概念。

  

  今天我的分享主要包括3個部分,簡單介紹TensorFlow的架構;理解計算圖的工作原理;通過Mnist實戰,了解TensorFlow編程模型。

  

  

  TensorFlow在跨平臺,通用性,分布式, 可擴展性,可視化等方面優勢非常明顯。

  

  TensorFlow是一種典型的基于符號編程的數值計算框架,從總架構上分為兩層:

1. 前端:負責計算圖的構造,支持多語言,其中Python提供的 API最為成熟;

2. 后端:負責計算圖的執行,使用C++實現,直接操作分布式的CPU/GPU環境。

  

  

  計算圖是TensorFlow最重要的領域概念,OP代表節點,Tensor代表邊; 數據從節點流入,通過OP運算,從節點流出,并做為下一節點的輸入,TensorFlow的命名由此而來。

  

  OP用于表示計算圖的一個節點,完成某種抽象的計算。

  

  TensorFlow支持豐富的OP集合,并且支持OP的擴展。

  

  OP通過OP構造器(OP Constructor)生成OP實例,該工廠具有副作用,它將該OP實例注冊到計算圖中。 此時用戶對圖實例無感知,因為其上下文存在一個默認的圖實例。

  

  OP的輸入和輸出以Tensor的形式傳遞,支持三種基本類型。

  

  描述OP可以通過三個維度描述:

1. 類型

2. Tensor的Shape:維度,及其每一維度的大小

3. 約束:例如默認值,允許的值列表

  

  以placeholder的OP為例,該OP是一個特殊的OP,它沒有輸入,只有輸出。而且,他的類型為確定,待用戶在構造OP是確定,可以看成一個「泛型編程」的過程。

  

  這是placeholder OP的構造器(constructor),或稱為工廠。調用OP時,指定OP的屬性,從而確定OP的基本規格。該過程類似于C++模板實例化,但還未生成對象實例(直至執行計算圖階段)。

  

  Operation描述了OP的接口(類型,約束,屬性,設備等),Kernel是針對具體設備類型,或者數據類型,Tensor的維度及大小的某種具體實現。典型地,OP會有GPU實現的Kernel,及其CPU實現的Kernel 。 這是一種典型的多態設計(區別于編程語言的多態)。

  

  Tensor表示計算圖的邊實例,表示OP之間的數據流方向。

  

  Tensor可以通過三元組描述:(Type, Rank, Shape)。

  

  查看源代碼(簡化之后),其Protobuf是如此描述Tensor的,其很好地形式化描述了Tensor的本質。

  

  在計算圖中,存在兩種類型的邊:

1. 正常的邊:用于傳遞Tensor;

2. 特殊的邊:用于控制依賴。

  

  控制依賴是一種構建復雜網絡模型的重要工具,它表示OP之間執行的依賴關系。

  

  當前上下文,維護了一個指向default graph的指針;也就是說,在任何一個時刻,在上下文中都存在一個默認的圖實例。 圖實例包括兩類:

1. 隱式的圖實例

2. 顯式的圖實例

  

  前者的OP注冊到隱式的圖實例,后者的OP注冊到顯式的圖實例中。

  

  OP命名的層次化是一種搭建復雜網絡的重要工具。例如,將OP看成西安市,那么如何從地球中找到它呢? 首先,通過世界地圖,先找到亞洲,然后找到中國,然后再找到陜西,最后才找到西安。 當搭建復雜的網絡模型時,OP命名的層次化,對于OP定位是非常有用的。

  

  可以指定OP的設備類型,當執行計算圖時,該OP會被分配到指定的設備上執行運算。

  

  默認圖實例(Default Graph),OP命名的層次化(Name Scope),指派設備(device)等機制,實際是由Context Manager管理,保證在某一個時刻,存在唯一的默認圖實例,及其當前的Scope,及其當前的Device等等。

  

  總結一下,TensorFlow是一種基于符號的編程模式,前端完成計算圖的構造,后端完成計算圖的執行。

  

  這里舉一個簡單的例子,x表示模型的輸入,y_表示模型的輸出(Labels);定義了W, b兩個訓練參數,然后使用matmul的OP,及其add的OP完成權重的線性求和,最后使用ReLU的激活函數,搭建了第一層網絡模型。 其中C代表后續的網絡層次。

  

  上述代碼實現,構造了如上圖所示的計算圖實例。

  

  通過建立一個Session,使用Mini-Batch算法實現該模型的訓練。很顯然,計算圖被構造依次,但被執行了多次(一次一個Batch)。

  

  這是使用Protobuf描述計算圖的領域模型。

  

  這是前端(Python)的領域模型。

  

  這是后端的領域模型。

  

  Session是Client與計算服務的橋梁,是一種資源,使用完成后保證被關閉;session.run建立了一個瞬時的閉包,該閉包針對于該次Batch,依次傳遞Tensor,完成整個計算的過程,然后再將梯度反傳,最后完成參數的更新。 每個子圖只會構造依次,但可能被執行多次。Tensor在OP之間傳遞,其生命周期僅對當前批次有效,對下一個Mini-Batch無效。

  

  其中,Feed代表模型的輸入,Fetch代表模型的輸出。

  

  變量是一種特殊的OP,它維持一個Tensor的句柄,變相地延長了該Tensor的生命周期。

  

  變量在使用之前,都需要使用初始化的OP進行初始化。例如,W使用tf.zeros的初始化OP進行初始化為0值。

  

  存在一些語法糖,可以方便地對變量進行初始化(組合模式)。

  

  猶如C++全局變量初始化的依賴關系,TensorFlow變量之間的初始化依賴關系需要特殊的處理。

  

  可以使用Stateful的OP操作變量,完成變量狀態的變更。

  

  通過變量分組,可以方便對變量進行分組管理。例如,可以快速獲取出所有訓練參數的集合。

  

  接下來,通過Mnist的實戰,加深 理解TensorFlow的編程模型。實戰包括兩種網絡模型的實踐:

1. 單層網絡(Softmax)

2. 多層網絡(2層網絡)

  

  特征提取,因為只是Demo示例,這里簡單地按照像素進行特征的提取。

  

  訓練樣本集的示意圖,它是一個二維的Tensor。

  

  這是訓練樣本的標簽集合(Labels),采用One-hot形式的特征描述 。

  

  首先描述模型的輸入和輸出,其中None表示batch_size,待seesion.run的Feed提供。

  

  然后定義模型的訓練參數集合,并定義變量初始化OP,用于在執行階段完成變量的初始化。

  

  這里定義了Mnist的Softmax單層網絡模型。

  

  然后定義交叉熵的損失函數,并使用隨機梯度下降算法優化該損失函數,使得損失函數最小化。

  

  然后建立一個會話,使用Mini-Batch算法,完成模型的訓練。 」

  

  當完成模型的馴良后,可以使用測試數據集對模型進行測試,輸出模型的精度。

  

  接下來,通過搭建兩層網絡模型實現Mnist。其中,通過計算圖的4個基本子圖,顯式地增強模型設計的可理解性。

- Inference:僅完成推理,僅僅包括前向計算過程;

- Loss:構建損失函數,計算損失;

- Training:根據損失,反向傳遞梯度,然后更新權重,直到模型收斂;

- Evaluation:評估模型的精度

  

架構圖還是構架圖?架構圖  第1張

  這里搭建了兩層的網絡模型: 第一層:ReLU 第二層:Softmax

  

  這是推理的主要邏輯,定義了兩層網絡。

  

  使用交叉熵定義損失函數。

  

  使用隨機梯度下降算法最小化損失函數 。

  

  使用evaluation評估網絡模型的精度。

  感謝大家的耐心閱讀,如果您對TensorFlow的架構與設計感興趣,請持續關注我后續關于TensorFlow源代碼的剖析,謝謝。

  

  參考資料,網絡上已經很豐富了,在此不在重述了。當然,閱讀源代碼,是獲取最權威的知識的最佳途徑。

  

  最后,歡迎大家關注我的「簡書」,直接搜索「劉光聰」,我主要關注敏捷軟件開發,機器學習算法,也歡迎大家給我更多的指點,謝謝。

問答環節

  Q1. 對TensorFlow的集群化搭建有何建議?

  A1. TensorFlow的分布式架構已經超過本次分享的內容,希望爭取下次機會再組織一次關于分布式架構與工作機制,實踐應用的分享。

  其中,在講義的最后一節,有一個關于TensorFlow分布式的簡單介紹,請查閱:

  http://www.jianshu.com/p/a857743c7095

  TensorFlow分布式的簡單介紹

  識別二維碼直達光聰的簡書地址

  Q2. 我可以理解為TensorFlow是一個張量為具體參數的數值計算框架嗎?有沒有張量為閉包的數值計算框架?我對TensorFlow感興趣主要是因為它底層是C++實現,我認為可能會比較高效。

  A2. TensorFlow是一個通用的,分布式的數值計算框架,是業界關注最為廣泛的深度學習框架;其中,Tensor是TensorFlow的一個重要數據結構,它是一個特定類型,任意維度,且每個維度任意大小的高維數組。

  TensorFlow的前端支持多語言編程,而后端使用C++實現,直接操作CPU/GPU硬件,性能是其考慮的重要因素。

  Q3. 請問機器學習是不是必須是數學專業?

  A3. 機器學習是一個多學科交叉的領域,它是人工智能的一個重要分支。當然,機器學習的確需要一定的數學基礎,例如線性代數,微積分,概率論與數理統計。

  推薦https://github.com/exacity/deeplearningbook-chinese第一部分關于數學基礎的概括性介紹。

  Github上鏈接,第一部分關于數學基礎的概括性介紹。

  識別二維碼直達

  Q4. 請問中興通訊在機器學習在哪些領域上應用?

  A4. 智能運維,終端,IoT,智能家居等方面都要相關應用。

  Q5. 訓練過程能否將狀態持久化到硬盤…

  A5. TensorFlow支持Checkpoint的特性,請參閱https://www.tensorflow.org/versions/master/how_tos/variables/#checkpoint_files

  Checkpoint官網介紹

  識別二維碼直達

致謝為知識贊賞的朋友

  —

  —

  

  

  鳴謝

  致謝為知識打賞的以上群友,祝雞年大吉,更上層樓

  —

  —

  為慶祝中生代成立一周年,也為了答謝長期支持的朋友們,中生代技術聯合iTechPlus在上海舉行年度大會

  

  

  戳原文,查看光聰簡書!

發表評論

主站蜘蛛池模板: 色噜噜五月综合激情久久爱 | 国产精品成人麻豆专区 | 青青热久久综合网伊人 | 国产色秀视频在线观看 | a毛片毛费观看 | 97在线视频99播放 | 中文在线日韩 | 国产精品免费视频播放 | 成人精品网 | 伊人亚洲综合网成人 | 91极品女神嫩模在线播放 | 亚洲韩精品欧美一区二区三区 | 激情九月婷婷 | 亚洲欧美日韩中另类在线 | 国内在线观看精品免费视频 | 国产综合久久久久影院 | 国产色婷婷精品综合在线观看 | 国产高清japanese国产在线观看 | 久久欧美精品欧美九久欧美 | 一级欧美视频 | 国产精品久久久久久久久久久搜索 | 网址黄色 | 国产精彩视频在线 | 看片日韩 | 九九精品成人免费国产片 | 国产做人爱三级视频在线 | 亚洲狠狠婷婷综合久久久图片 | 超级成人97碰碰碰免费 | 欧美成人全部免费观看1314色 | 日日噜噜夜夜狠狠视频无 | 一级做a爰片性色毛片视频图片 | 午夜一区二区免费视频 | 亚洲国产成人精品一区二区三区 | 亚洲第一视频在线 | 日韩欧美一区二区三区免费看 | 青青热在线精品视频免费 | 欧美一区二区三区视频在线观看 | 一级做a爱片特黄在线观看yy | 成人网18免费软件大全 | 六月婷婷精品视频在线观看 | 黄色自拍视频 |