前面花了ep.4~ep.7四篇去帶過train.py
的程式。
接下來要往datasets/
相關的程式邁進了,開始吧~
萬事起頭難,沒有資料什麼都很難。
不同的資料集往往會有不一樣的結構,因此就要針對每個資料集寫一套處理資料的程式。
那麼如果我們在產生資料給模型之前,能先用針對某資料集的這樣一個程式,將資料集重新整理成一種固定的格式,那麼我們的資料前處理,就可以在一定程度上,共用程式碼。
因此接下來會先講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點的時候,莊家發給每位玩家的動作很像。