引用庫文件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)
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 中。
buffer_size = 1 數據集不會被打亂
buffer_size = 數據集樣本數量,隨機打亂整個數據集
buffer_size > 數據 集樣本數量,隨機打亂整個數據集
shuffle是防止數據過擬合的重要手段,然而不當的buffer size,會致使shuffle無心義,具體能夠參考這篇Importance of buffer_size in shuffle()
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
版權聲明:本文爲博主原創文章,轉載請附上博文連接!
一次喂入神經網絡的數據量(batch size)。
官方網站上,闡述了 repeat 在 shuffle 以前使用能夠有效提升性能,可是模糊了數據樣本的 epoch
實際上,能夠這樣理解shuffle取以前已經重置了源數據集,
即先repeat,後shuffle。tf會將數據集乘以repeat次數,而後整個打亂一次,把它看成一個數據集
dataset = dataset.shuffle(buffer_size=10000) dataset = dataset.batch(32) dataset = dataset.repeat(num_epochs)
深度學習中的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 圖片及相應的解說引用這篇文章