tf.data.Dataset.from_tensor_slices中的shuffle()、repeat()、batch()用法

1 代碼

引用庫文件html

from __future__ import absolute_import, division, print_function, unicode_literals
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow import feature_column
from tensorflow.keras import layers
from sklearn.model_selection import train_test_split

加載數據集,生成數據幀資源句柄網絡

# 將heart.csv數據集下載並加載到數據幀中
path_data = "E:/pre_data/heart.csv"
dataframe = pd.read_csv(path_data)

將pandas dataframe 數據格式轉變爲 tf.data 格式的數據集形式函數

# 拷貝數據幀,id(dataframe)!=id(dataframe_new)
 dataframe_new = dataframe.copy()
 # 從dataframe_new數據中獲取target屬性
labels = dataframe_new.pop('target')
# 要構建Dataset內存中的數據
dataset = tf.data.Dataset.from_tensor_slices((dict(dataframe_new), labels))
# 將數據打亂的混亂程度
dataset = dataset.shuffle(buffer_size=len(dataframe_new))
# 從數據集中取出數據集的個數
dstaset = dataset.batch(100)
# 指定數據集重複的次數
dataset = dataset.repeat(2)

2 shuffle、batch、repeat三個方法 / 函數

2.1 shuffle方法 / 函數

2.1.1 shuffle 函數實現過程

shuffle 是用來打亂數據集的函數,也即對數據進行混洗,此方法在訓練數據時很是有用。post

dataset = dataset.shuffle(buffer_size)

參數buffer_size值越大,意味着數據混亂程度也越大。具體原理以下所示。性能

假設buffer_size = 9,也即先從 dataset 數據集中取出 9 個數據「拖」到 buffer 區域中,後續訓練數據的每個樣本將從 buffer 區域中獲取。學習

 好比從 buffer 區域取出一個數據 item7,現 buffer 區域內只有 8 個數據。優化

而後從 dataset 中按順序取出一條數據(item10)再次「拖」到 buffer 區域補缺。網站

而後訓練數據時再隨機從 buffer 區域內隨機選擇一條數據;buffer 區域又造成數據空缺。url

須要說明的是,這裏的一條數據 item 只是一個抽象描述,其實爲 bach_size 量的數據大小。spa

實際上,咱們能夠發現,buffer 實際上是定義了一個數據池的大小 buffer size,當數據從被從 buffer 中取走後,就會從源數據集中抽出樣本補缺到 buffer 中。

2.1.2 shuffle 方法的參數

buffer_size = 1 數據集不會被打亂

buffer_size = 數據集樣本數量,隨機打亂整個數據集

buffer_size > 數據 集樣本數量,隨機打亂整個數據集

 

shuffle是防止數據過擬合的重要手段,然而不當的buffer size,會致使shuffle無心義,具體能夠參考這篇Importance of buffer_size in shuffle()

2.2 repeat方法 / 函數

repeat 方法在讀取到組後的數據時重啓數據集。要限制epochs的數量,能夠設置count參數。

爲了配合輸出次數,通常默認repeat()空

repeat函數相似與 epoch 

如今用的優化器SGD是stochastic gradient descent的縮寫,但不表明是一個樣本就更新一回,仍是基於mini-batch的。

那 batch epoch iteration表明什麼呢?

(1)batchsize:批大小。在深度學習中,通常採用SGD訓練,即每次訓練在訓練集中取batchsize個樣本訓練;

(2)iteration:1個iteration等於使用batchsize個樣本訓練一次;

(3)epoch:1個epoch等於使用訓練集中的所有樣本訓練一次,通俗的講epoch的值就是整個數據集被輪幾回。

好比訓練集有500個樣本,batchsize = 10 ,那麼訓練完整個樣本集:iteration=50,epoch=1.
---------------------
做者:bboysky45
來源:CSDN
原文:https://blog.csdn.net/qq_18668137/article/details/80883350
版權聲明:本文爲博主原創文章,轉載請附上博文連接!

2.3 batch 方法 / 函數

一次喂入神經網絡的數據量(batch size)。

 

3 shufle、repeat、batch三者之間的關係

官方網站上,闡述了 repeat 在 shuffle 以前使用能夠有效提升性能,可是模糊了數據樣本的 epoch 

實際上,能夠這樣理解shuffle取以前已經重置了源數據集, 

先repeat,後shuffle。tf會將數據集乘以repeat次數,而後整個打亂一次,把它看成一個數據集

dataset = dataset.shuffle(buffer_size=10000)
dataset = dataset.batch(32) 
dataset = dataset.repeat(num_epochs)

 

4 出處

深度學習中的batch、epoch、iteration的含義 https://blog.csdn.net/qq_18668137/article/details/80883350

 tf.data.Dataset.from_tensor_slices( ) https://blog.csdn.net/u012193416/article/details/83720078

TensorFlow.org教程筆記(二) DataSets 快速入門 http://www.javashuo.com/article/p-fzivwbjd-eb.html

tensorflow dataset.shuffle dataset.batch dataset.repeat 理解 注意點http://www.javashuo.com/article/p-zabyfyjl-gn.html該文詳細講解了三者的含義,評論的內容也很重要

dataset中shuffle()、repeat()、batch()用法https://blog.csdn.net/angel_hben/article/details/84341421,一段代碼示例

tf.data.Dataset.shuffle(buffer_size)中buffer_size的理解https://www.jianshu.com/p/1285036e314c 圖片及相應的解說引用這篇文章

相關文章
相關標籤/搜索