keras模型訓練之fit與fit_generator

2020-12-11 桔子的算法之路

最近用keras訓練模型時由於數據集很大,使用fit會佔用很多內存,所以用了下批量訓練接口fit_generator,首先我們先看下這兩個接口的基本調用方式:

從上述兩個例子可以看出來,fit是直接加載所有的訓練集數據,而fit_generator通過自定義的批加載函數每次只讀取batch_size大小的數據集進行訓練,假設有1W張圖片,fit則要直接把這1W張圖片加載進行迭代訓練,而fit_generator每次只加載100張圖像進行訓練,則其內存佔用只有fit的百分之一,就不用擔心內存過多了。

好了,對於大數據集使用fit_generator確實可以減少內存佔用,這個就不用測了,那麼速度上fit與fit_generator相比會怎樣呢?我們下面來進行測試對比一下:

model.fit性能
model.fit_generator性能

上面的測試是60000幅圖像,batch_size=100,epoch=2,從結果可以看出兩次測試速度一樣,大概都是38秒一輪,測試集準確率和誤差幾乎一致,這說明在性能方面其效果是一致的。

好了,總結一下就是對於大數據集來說,如果訓練集佔用內存過大的話可以使用fit_generator進行批訓練,對於小數據集的話就沒必要了,直接fit就行。

相關焦點

  • 用Keras從零開始6步驟訓練神經網絡
    其中準備數據,構建模型和訓練模型是必選的3個步驟。1,準備數據:可以從keras的dataset導入玩具數據集,也可以導入外部數據集,並使用圖像,文本,序列等數據預處理工具進行數據預處理。當數據規模較大時,需要使用Sequence等工具構建數據管道以備在訓練過程中並行讀取。
  • Keras使用進階(Ⅰ)
    恰好這大半年的research也用到了keras高級點的特性,尋思著是時候寫一篇keras使用進階的文章來記錄下自己「摸魚」的日子.用keras訓練多標籤數據通常用keras做分類任務,一張圖像往往只對應著一種類別,但是在實際的問題中,可能你需要預測出一張圖像的多種屬性。
  • 手把手教你用Python庫Keras做預測(附代碼)
    在做預測之前,首先得訓練出一個最終的模型。你可能選擇k折交叉驗證或者簡單劃分訓練/測試集的方法來訓練模型,這樣做的目的是為了合理估計模型在樣本集之外數據上的表現(新數據) 當評估完成,這些模型存在的目的也達到了,就可以丟棄他們。接下來,你得用所有的可用數據訓練出一個最終的模型。
  • 用PyTorch重新創建Keras API
    老實說,在Keras的模型訓練中,我很興奮這個進度條,真是太棒了。那麼,為什麼不嘗試把Keras訓練模型的經驗帶到PyTorch呢?這個問題讓我開始了工作,最後我用所有那些花哨的進度條重現了Keras的Dense層、卷積層和平坦層。模型可以通過堆疊一層到另一層來創建,並通過簡單地調用fit方法進行訓練,該方法類似於Keras的工作方式。
  • 初學者怎樣使用Keras進行遷移學習
    模型的構建是一個三步過程: 導入預先訓練的模型並添加密集層。 將數據加載到ImageDataGenerators中。 訓練和評估模型。import Modelfrom keras.optimizers import Adam 然後,導入預訓練好的MobileNet模型。
  • Keras 2發布:實現與TensorFlow的直接整合
    訓練和評估生成器方法的 API 已經改變(如: fit_generator、predict_generator 和 evaluate_generator)。不過,無需擔心,Keras 1 的調用依然適用於 Keras 2。fit、nb_epoch 已重命名為為 epochs。我們的 API 轉換接口也適用於這項改變。很多層所保存的權重格式已經改變。
  • 一文上手Tensorflow2.0之tf.keras|三
    使用「model.fit」來執行模型的訓練,其中參數「data」和「labels」分別為訓練數據和類標,「epochs」為訓練的回合數(一個回合即在全量數據集上訓練一次),「batch_size」為訓練過程中每一個批次數據的大小。輸出結果如圖1所示。
  • 10分鐘入門Keras : 兩種快速模型搭建方式
    最簡單的模型是 Sequential 順序模型,它由多個網絡層線性堆疊。對於更複雜的結構,你應該使用 Keras 函數式 API,它允許構建任意的神經網絡。Sequential 使用方法Sequential 模型如下所示:from keras.models import Sequentialmodel = Sequential()可以簡單地使用 .add() 來堆疊模型:from keras.layers import
  • 圖像分類任務中,Tensorflow 與 Keras 到底哪個更厲害?
    現在,讓我們採用Google的Tensorflow進行實驗來訓練模型。谷歌的這個倉庫有許多令人驚嘆的處理圖像的簡單實驗的腳本。它非常簡潔,足以滿足我們的目的。還記得前面我用過「強大」這個詞嗎?是的,當我們使用稱為遷移學習的方法時,這個詞就會生效。遷移學習是一種有效的方式,它使用預訓練模型,這些模型已經訓練了幾天或幾周,然後改變最後一層以適應我們自己的類別。
  • 使用 Keras搭建一個深度卷積神經網絡來識別 c驗證碼
    數據生成器訓練模型的時候,我們可以選擇兩種方式來生成我們的訓練數據,一種是一次性生成幾萬張圖,然後開始訓練,一種是定義一個數據生成器,然後利用 fit_generator 函數來訓練。訓練模型訓練模型反而是所有步驟裡面最簡單的一個,直接使用 model.fit_generator 即可,這裡的驗證集使用了同樣的生成器,由於數據是通過生成器隨機生成的,所以我們不用考慮數據是否會重複。注意,這段代碼在筆記本上可能要耗費一下午時間。如果你想讓模型預測得更準確,可以將 nb_epoch改為 10 或者 20,但它也將耗費成倍的時間。
  • 做數據處理,你連 fit、transform、fit_transform 都分不清?
    從算法模型的角度上講,fit 過程可以理解為一個訓練過程。即:fit + transform = fit_transform即 fit_transform 是 fit 和 transform 的組合,整個過程既包括了訓練又包含了轉換fit_transform 對數據先擬合 fit,找到數據的整體指標,如均值、方差
  • Keras結合Keras後端搭建個性化神經網絡模型(不用原生Tensorflow)
    我們定義並訓練一個神經網絡模型需要考慮的要素有三個:層、損失函數、優化器。而我們創新主要在於前兩個,因此下面介紹如何結合Keras高級API與後端,自定義特殊神經網絡層以及損失函數。自定義網絡層自定義層可以通過兩種方式實現:使用Lambda層和繼承Layer類。
  • Keras做圖片分類(四):遷移學習--貓狗大戰實戰
    遷移學習模型上篇文章討論過圖片歸一化預處理時,ndarray的dtype會變成float,內存佔用是uint8格式的4倍,如果直接全部載入可能會造成內存錯誤OOM。所以我們選擇在模型中進行預處理。首先第一步,選擇我們要使用的預訓練模型,這裡以ResNet50為例,看keras是如何進行遷移學習的。
  • Keras構建模型的一般流程
    首先引入 tensorflow 和 keras。import tensorflow as tfimport tensorflow.keras as kerasKeras 是深度學習框架,裡面有各種深度學習模型,介紹它之前讓我們先回憶下它的好兄弟 - 機器學習框架 Scikit-Learn。
  • 從零開始深度學習第17講:keras入門及快速上手指南
    keras 以 Tensorflow、Theano、CNTK 為後端,意思就是 keras 的底層計算都是以以上這些框架為基礎的,這使得 keras能夠專注於快速搭建起神經網絡模型。keras 搭建神經網絡的基本流程     利用 keras 搭建神經網絡模型非常快速和高效,其模型實現的核心流程可以用四個步驟來概括。
  • 深度學習第17講:keras入門和快速上手指南
    在前面幾講中,我們著重對 Tensorflow 進行了介紹,並用其實現了一些數據例子。Tensorflow 雖然很強大,但語法和使用便利性上對於新手來說並不是那麼的友好,所以到這裡筆者需要給大家介紹 keras 了。
  • 盤一盤 Python 系列 11 - Keras (下)
    超參數是控制訓練過程和機器學習模型拓撲的變量,它們在訓練過程中保持不變,有三種類型:影響模型選擇的模型超參數 (model hyperparameters),如隱藏層包含神經元的個數影響算法質量的算法超參數 (algorithm hyperparameters),如 learning_rate
  • TextCNN 模型完全解讀及 Keras 實現
    下一篇文章會通過期刊論文來介紹幾篇CNN的具體應用實例,主要介紹模型的網絡結構。TextCNN模型是Yoon Kim在2014年 《Convolutional Neural Networks for Sentence Classification》中提出的,利用卷積神經網絡(CNN)來對處理文本分類問題(NLP)。