簡體   English   中英

僅使用batch_size 和僅使用steps_per_epoch 的Keras model.fit 之間的區別

[英]Difference between Keras model.fit using only batch_size and using only steps_per_epoch

當我model.fit使用batch_sizesteps_per_epoch參數運行model.fit ,我收到以下錯誤:

ValueError: If steps_per_epoch is set, the `batch_size` must be None.

因此,從這個錯誤和來自 keras 模型(功能 API)的以下文檔

batch_size:整數或無。 每次梯度更新的樣本數。 如果未指定,batch_size 將默認為 32。

step_per_epoch:整數或無。 宣布一個時期結束並開始下一個時期之前的總步數(樣本批次)。 當使用輸入張量(例如 TensorFlow 數據張量)進行訓練時,默認 None 等於數據集中的樣本數除以批量大小,如果無法確定,則為 1。

我知道這兩個參數在某種程度上是等效的。 但是,在我的筆記本電腦上(使用帶有 2GB VRAM 的 GeForce 940M 顯卡並訓練 cifar10 數據集)當我運行model.fit參數設置為 256 時,腳本運行良好,並且來自 keras 的反饋如下:

4608/50000 [=>............................] - ETA: 1:59 - loss: 0.8167 - acc: 0.7398

更新第一個數字總是添加 256 個單位。 但是,當將steps_per_epoch作為number_train//batch_size傳遞時,內存不足並且無法運行我的腳本,除非我將batch_size傳遞為 1。

那么, model.fit如何處理這些參數呢? 當我只使用其中一種而不是另一種時有什么區別?

這是個好問題。 我從源代碼( [1][2] )觀察到的是:

  • 當您設置batch_size ,訓練數據被分割成這個大小的批次(參見L184 )。
  • 當您設置steps_per_epoch ,如果訓練輸入不是框架原生張量(這是最常見的情況),則整個訓練集將一次性輸入網絡(請參閱L152 ),這就是您獲得內存的原因錯誤。

因此,基於實現,我建議僅在通過框架原生張量(即第一維是批量大小的 TensorFlow 張量)饋送時才使用參數steps_per_epoch ,這確實是一個要求。 為此,需要將model.fit的參數xy設置為None

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM