iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 21
0
AI & Data

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

二、教你怎麼看source code,找到核心程式碼 ep.14:如何把tfrecord轉成tf.data的dataset? 2

文章說明

文章分段

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

 

前情提要

ep.13開始解釋datasets/data_generator.py這份程式,這份程式的主要功能是利用寫好的一個叫做Dataset的class,解析之前用build_DATASET_data.py產生的tfrecord,並把解析完成的資料,存在tf.data.TFRecordDataset格式的變數裡,傳回去train.py供訓練使用。

解析的步驟主要有兩個。

  • 第一個是利用當初儲存tfrecord時所設定的資料格式,將一個個data與label從string byte形式解析和解碼回來。
  • 第二個則是把已經解析完成的data與label,進行所需要的前處理,例如調整長寬、改變input size、隨機放大縮小等,通常會是一些data augmentation的程式所在的位置。

今天要開始講的就是這份程式是怎麼去達成上面兩個步驟。

開始吧。

 

逛deeplab的github程式(cont.)

datasets/data_generator.py (cont.)


總而言之,使用這個method會得到一個字串,意義不明:D。

 



在train.py的程式裡,有呼叫116行的Dataset,然後這個class的初始值在119-135行。上圖是原始碼,下圖是我把當時train.py在呼叫時,對應使用的argument與預設值,寫在一起的對照圖,#後方是argument,=後面則是參數的預設值。

其中有4個參數在我去找的時候,發現在data_generator.py沒有宣告到這些參數,但tensorflow團隊不是我,不可能犯這種低級錯誤,於是我去common.py裡找,還真的找到這幾個參數。

原來tf.app.flags的參數是可以分開檔案寫的。

 

接著是Dataset這個class的參數說明,我先放在這邊,等底下程式用到參數後再一一解釋。

 

  • 163-164行在確認使用的資料集有沒有在目前支援的3個資料集內,沒有的話,直接報錯結束程式。
  • 165行,過了偵錯部分,將argument賦值給object的同名attribute。
  • 167行,根據dataset_name把對應dataset的split與對應size的資料,存入splits_to_sizes這個變數。
  • 169-170行,確定此次呼叫的split有製作。
  • 172-175行,確認有無使用backbone,173行這裡只有寫warning,代表程式本身是能夠不使用backbone的就能執行的。

一般來說,的確是要讓程式可以選擇要不要用backbone才比較合理吧。

 

*train.py

接著就是把剩餘的attribute都設定設定,這樣train.py那裡,一個是Dataset這個class產生的object的dataset,就產生完畢。

 
*train.py

接著,train.py就呼叫了class的methodget_one_shot_iterator()

後續明天講。


上一篇
二、教你怎麼看source code,找到核心程式碼 ep.13:如何把tfrecord轉成tf.data的dataset?
下一篇
二、教你怎麼看source code,找到核心程式碼 ep.15:如何把tfrecord轉成tf.data的dataset? 3
系列文
從零.4開始我的深度學習之旅:從 用tf.data處理資料 到 用tf.estimator或tf.keras 訓練模型30

尚未有邦友留言

立即登入留言