iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 15
0
AI & Data

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

二、教你怎麼看source code,找到核心程式碼 ep.8:資料前處理(e.g. Deeplab)

文章說明

文章分段

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

 

前情提要

前面花了ep.4~ep.7四篇去帶過train.py的程式。

接下來要往datasets/相關的程式邁進了,開始吧~

 

逛deeplab的github程式(cont.)

萬事起頭難,沒有資料什麼都很難。

不同的資料集往往會有不一樣的結構,因此就要針對每個資料集寫一套處理資料的程式。

那麼如果我們在產生資料給模型之前,能先用針對某資料集的這樣一個程式,將資料集重新整理成一種固定的格式,那麼我們的資料前處理,就可以在一定程度上,共用程式碼。

因此接下來會先講build_dataset_data.py這類的程式,作為開端。

 

build_voc2012_data.py


首先,19-36行很親切地說明了下載下來的資料集的結構,並且告訴你放data的資料夾路徑和label資料夾的路徑,還有一個list是表明哪些data是屬於train、哪些data是用來validation的。

 


接著介紹資料的每個欄位的名字,以及存放的內容。

我目前看下來,他們的命名方式都會跟tensor name一樣,用scope去框定同類型的變數,所以資料集中的每個欄位,都是image開頭的。

舉例來說,image/height存放的就是單張圖片的高是幾個pixel。

 


接著是參數部分,就是把data資料夾路徑、label資料夾路徑、還有list、最後還有產生出來的tfrecord要放的位置。

 


接著看到86行有個常數num of shards,這個常數是用來分發資料到多個tfrecord的。

問題是為什麼要這樣做?

其實在一般來說,會建議一個tfrecord的大小不要超過100MB這個大小,原因是可能會需要做到資料傳輸,如果資料太大,容易失敗,於是這個shard預設是4,就是把tfrecord分成4份,每一份拿到1筆資料後,再拿下一份,跟玩21點的時候,莊家發給每位玩家的動作很像。


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

尚未有邦友留言

立即登入留言