iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 9
0
AI & Data

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

二、教你怎麼看source code,找到核心程式碼 ep.3:訓練流程的細節

文章說明

文章分段

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

 

ep.2多補充了我對於tensorflow程式碼的心得,像是我理解到有系統地為tensor命名是一件很重要的事,然後有哪些工具可以幫助我快速處理命名問題。

今天我想要透過已經初步介紹的API,去描述監督式學習的過程,資料集與神經網路之間的互動這樣。

開始吧。

 

訓練流程的細節

訓練神經網路的過程,以監督式學習來說,就是要把資料集組成一對對的data與label,作為訓練input與answer,讓data作為input流入神經網路,在最後的節點或最後一層神經層輸出為1個output後,將神經網路的這個output與answer對答案,這個對答案的方式必須要可微分,然後再透過反向傳播去更新神經網路所有trainable的parameter。

 

那處理資料夾的部分,就會是交由tf.data來處理,將tfrecord讀入後,用當初儲存的格式進行解析,作為iterator送進tensorflow訓練模型的API。每次呼叫iterator,它就會輸出一組data與label供給神經網路。

事實上,我記得我之前曾經以為data與answer都會作為input流入神經網路,然後在最後的節點進行處理,我之前還覺得奇怪網路怎麼知道要處理哪個作為input,後來才知道只有data會歷經神經層,answer並不會。

這個iterator的概念是跟python本身帶有的generator的概念類似,但其掌管的是tensor object。

 

資料集在成為一個可供神經網路使用的iterator之前,會進行前處理,像是根據不同pretrained model選擇不同的normalize數值、決定input shape、shuffle、一些data augmentation等,都會在產生成為一個iterator之前先定義完成。

 

接著神經網路的部分,通常初學者在接觸tensorflow的網路時,應該都會使用tf.keras或獨立的keras API作為使用工具,他的使用方式其實非常符合搭建神經網路的方式,程式從上到下、清楚明暸的定義,可以看zhixhuhao的unet,定義非常的直觀。

但在許多論文之中其實他們描繪的神經網路結構卻是從下到上,所以有時候會造成混淆。另外在程式中,神經網路的輸出更多會稱其為end_point而非output,而且end point通常會是一個dictionary或是list,因為有的時候會不止一個tensor作為輸出,也有時候放進end point只是為了更外層的運算。

 

寫好的backbone(extractor)通常都會是這樣命名,像deeplab的feature extractor就是這樣子命名的。

有開始看程式碼的人應該就會知道要去哪裡取結果了

 
 

很晚了,今天就先講到這裡吧,明天再開始trace code吧!


上一篇
二、教你怎麼看source code,找到核心程式碼 ep.2:程式碼挖寶記
下一篇
二、教你怎麼看source code,找到核心程式碼 ep.4:trace code
系列文
從零.4開始我的深度學習之旅:從 用tf.data處理資料 到 用tf.estimator或tf.keras 訓練模型30

尚未有邦友留言

立即登入留言