记录 之 tf.data进行数据集处理常用的几个函数介绍
1.tf.data.Dataset.from_tensor_slices(),前面的文章我們有介紹過。
2.tf.data.Dataset.shuffle(buffer_size = n)
這里的shuffle函數是將數據集進行混洗,已達到次序的優化,這里的buffer_size的作用是先從原數據集中預取n個數據,然后每次從緩沖區中抽取一個元素,來達到輸入數據無序的目的,buffer_size的大小設置也會影響實驗結果,一般將buffer_sizeshe設置為len(your_dataset),即buffer_size的大小等于你數據集的大小(前提是每一個item代表的是一個單獨數據,當然每個item也可代表一個batch的數據,則這時的buffer_size = len(your_dataset)// batch_size)。具體操作如圖:
3.tf.data.Dataset.repeat(n)
這個其實比較好理解,就是為了加快數據處理的速度,在準備數據時,將整個數據集復制多少份,以epoch為界限,一般代碼運行多少個epoch,則參數n的值為epoch的數量,相當于我們為每個epoch都準備了相應的數據。
注意:其實這里大家可以考慮一下shuffle 和 repeat的順序關系對數據及構成有什么影響。
 ①先shuffle后repeat,在每一個epoch開始時都會進行shuffle的初始化,會影響性能。
 ②先repeat后shuffle,這樣就不能保證每一個epoch能包含整個數據集的數據,有些數據可能會在一個epoch里出現多次。
因此官方建議:采用方法①的順序。或采用:
 tf.contrib.data.shuffle_and_repeat
4.tf.data.Dataset.prefetch(buffer_size)
字面理解,這個函數就是一個預取函數,那么到底預取什么呢,我們來看下面兩張圖:
 1.傳統輸入方式(橫軸為時間):
2.采用預取函數后
 ?
大家對比這兩張圖就可以發現,預取函數講道理就是進一步提高了CPU的利用率,在GPU/NPU進行數據運算的時候,CPU同步為下一次訓練進行數據的準備工作。這里一個batch所花費的時間就是Prepare 和 train 兩者之間的最大值。
 本質上這是一個ET(數據準備)和L(消耗過程)的一個解耦過程。
以上幾個函數所涉及到的過程,在這篇博客里有非常詳細的圖解,能加深各位同學的理解,鏈接:https://www.cnblogs.com/yaos/p/12761917.html
?我們先介紹這么多,后續會繼續更新。
總結
以上是生活随笔為你收集整理的记录 之 tf.data进行数据集处理常用的几个函数介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 记录 之 tensorflow函数:tf
 - 下一篇: python 利用pandas库实现 读