tf.data.Dataset.interleave() 最通俗易懂的使用詳解(有圖有真相)

最近學習tensorflow,對於這個函數tf.data.Dataset.interleave()始終有點暈乎,即使搞明白了,用不了多久又忘了,在網上查了查,發現很少有人能把這個函數講清楚。趁着現在還明白,記錄下來——備忘+助友。

interleave()Dataset的類方法,所以interleave是作用在一個Dataset上的。
語法:

interleave(
    map_func,
    cycle_length=AUTOTUNE,
    block_length=1,
    num_parallel_calls=None
)

解釋:

  1. 假定我們現在有一個Dataset——A
  2. 從該A中取出cycle_length個element,然後對這些element apply map_func,得到cycle_length個新的Dataset對象。
  3. 然後從這些新生成的Dataset對象中取數據,取數邏輯爲輪流從每個對象裏面取數據,每次取block_length個數據
  4. 當這些新生成的某個Dataset的對象取盡時,從原Dataset中再取cycle_length個element,,然後apply
    map_func,以此類推。

舉例:

a = tf.data.Dataset.range(1, 6)  # ==> [ 1, 2, 3, 4, 5 ]
# NOTE: New lines indicate "block" boundaries.
b=a.interleave(lambda x: tf.data.Dataset.from_tensors(x).repeat(6),
            cycle_length=2, block_length=4) 
for item in b:
    print(item.numpy(),end=', ')

輸出結果:

1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 

上面程序的圖示,看示意圖可能更清晰:

在這裏插入圖片描述
其中map_func在這裏是重複6次-repeat(6)。

常見case:
dataset裏面存儲文件名, 將所有文件讀取出來,產生一個大數據集

更詳細內容可以參考官方文檔

發佈了46 篇原創文章 · 獲贊 42 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章