iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 16
1
AI & Data

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

二、教你怎麼看source code,找到核心程式碼 ep.9:如何製作tfrecord?

文章說明

文章分段

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

前情提要

從ep.8開始在講deeplab專案底下的dataset資料夾,一開始講的是build_voc2012_data.py,上一篇稍微講了程式的參數,還有到時候做成的tfrecord的資料結構,現在就繼續開始吧。

逛deeplab的github程式(cont.)

build_voc2012_data.py (cont.)

在看程式,尤其是看別人的寫的程式時,個人覺得最快且正確理解的做法,就是拿一份空的文檔,照著程式執行的順序打。

 


像是這份code第一個執行的功能是這裡,於是照著打程式的第一步就是先寫這裡,然後按照執行過後跳出的錯誤訊息,去補齊需要import的模組。之前好像有說過:run()預設會去執行同份檔案裡面,名稱是main()的副程式。

 


接著是用Glob把指定的list_folder資料夾裡所有結尾是.txt的檔,把這些.txt檔的路徑整理成list型態,然後依序去執行_convert_dataset()這個副程式。

 


_convert_dataset()只有一個參數,指名說現在處理出的tfrecord是屬於資料集的哪個類型。

然後有做了一個報錯,就是當遇到data與label的shape,舉例2d圖像的長、寬不同,或是3d影像的axis有出現對應不上的情況,就會報錯。

 


在來,98-99行就是用來貼心提醒的程式,按照他寫的邏輯,就是去print出list_folder底下扣除.txt部分的檔名。

接著100行則是打開一個txt檔,一樣按照他寫的方式,應該是用enter去分隔data的名字,所以用strip('\n')就可以把所有的data name放到filenames這個list中。

接著就是按照之前訂定的_NUM_SHARDS去確定說每個shard會被分到多少筆資料。

 



再來是build_data這個模組的class,透過ctrl+f找到build_data的import位置。

其實如果是我的話,我會把import package的部分改寫成這樣:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import math
import os.path
import sys
from six.moves import range

import tensorflow as tf

import build_data

最上面一組import是python原生的package;第二組是之後透過pip install下載的package;最後是自製的package。

這樣就可以馬上知道,build_data的程式,可以在跟這個檔案同層的資料夾找到。

於是接下來會稍微跳去build_data.py這個程式看一下。


上一篇
二、教你怎麼看source code,找到核心程式碼 ep.8:資料前處理(e.g. Deeplab)
下一篇
二、教你怎麼看source code,找到核心程式碼 ep.10:如何製作tfrecord? 2
系列文
從零.4開始我的深度學習之旅:從 用tf.data處理資料 到 用tf.estimator或tf.keras 訓練模型30

尚未有邦友留言

立即登入留言