iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 13
1
AI & Data

從零.4開始我的深度學習之旅:從 用tf.data處理資料 到 用tf.estimator或tf.keras 訓練模型系列 第 13

二、教你怎麼看source code,找到核心程式碼 ep.6:tensorflow的API琳瑯滿目

文章說明

文章分段

  1. 文章說明
  2. deeplab的簡單介紹、於我的意義
  3. tensorflow的程式碼特色
  4. 訓練流程的細節
  5. 逛deeplab的github程式,順序:train.py model.py datasets/data_generator.py …

 

前情提要

train.py被拆分成三個ep介紹,ep.4介紹的是參數的部分,主要有分訓練用的必要參數multi-GPU的非必要參數加速模型的非必要參數;ep.5介紹了程式流程的前半部分,最一開始就是先處理如何分配工作給多個GPU,接著依照多gpu載入的方式,分別載入資料集還有載入模型。

 

分配工作給多個GPU有兩種分法:

  • Data parallelism:一種是每個GPU拿到一樣的模型,大家把拿到資料平均分一分後,各自經過模型算loss後,取平均,再進行back propagation。
  • Model Parallelism:另一種是每個GPU分到模型的不同階段,各自拿到的資料都是一樣的。

tensorflow是用Data parallelism的方式,所以可以看到287行寫著要把指定的batch size,平均分給GPU們。

 

把資料集與糢型載入後,接著就剩下一些模型的運算(op)要定義,以及紀錄訓練情況的程式,還有最後真正執行訓練的部分。

剩下的部分,就讓我們開始吧。
 

逛deeplab的github程式(cont.)

train.py (cont.)

從ep.5講過的地方開始:

314行是透過tf.train提供的method去初始化模型更新次數的值。

接著317-320行在準備有關模型的參數。

321行利用模型的參數,建立多個模型副本,準備供GPU(們)使用。

325行只是在規範要取得的op的範圍,上面註解也有說只拿第一個clone的op。

326行把透過tf.get_collection,用兩個條件:1是指定拿Graph裡的update_ops,2是只拿在"clone_0"scope裡的update_ops,也就是只拿名字中有包含clone_0的update_ops。

然後with語法結束。

 

接著328-329行中,有看到summaries、tf.summary的程式,這些東西都會出現在event檔案中,也就是可以用tensorboard看的意思。

 
 
 

接著是透過tf.Graph提供的get_tensor_by_name的method,把input、output tensor給叫出來。

350-351行是把output tensor給叫出來,這裏output tensor的名稱是clone_0/semantic:0,會是這個名稱的原因除了已經知道多gpu的命名方式之外,還有317-320行的模型參數設定部分。

 
 

接著363-375行、379-385行就是模型的learning rate、optimizer要調配,挑選的事情。

 
 


接著是quantization的部分,即進一步加強模型performance的程式,這邊注意到的是,目前程式的quantization不支援用多GPU訓練,等於說兩個只能二擇一,我現在也不清楚是這兩個理論上做不到共存,還是實作上有困難。

 
 


接著就是在optimizer已設定好的情況下,去取得loss和gradients。


上一篇
tensorflow 使用tf.estimator, tf.data常見錯誤
下一篇
二、教你怎麼看source code,找到核心程式碼 ep.7:session、slim.learning.train()
系列文
從零.4開始我的深度學習之旅:從 用tf.data處理資料 到 用tf.estimator或tf.keras 訓練模型30

1 則留言

0
soft_soft
iT邦新手 5 級 ‧ 2020-09-29 21:49:04

Ok這些內容真的離我好遙遠QQ

我要留言

立即登入留言