基于keras中訓(xùn)練數(shù)據(jù)的幾種方式對(duì)比(fit和fit_generator)
一、train_on_batch
model.train_on_batch(batchX, batchY)
train_on_batch函數(shù)接受單批數(shù)據(jù),執(zhí)行反向傳播,然后更新模型參數(shù),該批數(shù)據(jù)的大小可以是任意的,即,它不需要提供明確的批量大小,屬于精細(xì)化控制訓(xùn)練模型,大部分情況下我們不需要這么精細(xì),99%情況下使用fit_generator訓(xùn)練方式即可,下面會(huì)介紹。
二、fit
model.fit(x_train, y_train, batch_size=32, epochs=10)
fit的方式是一次把訓(xùn)練數(shù)據(jù)全部加載到內(nèi)存中,然后每次批處理batch_size個(gè)數(shù)據(jù)來更新模型參數(shù),epochs就不用多介紹了。這種訓(xùn)練方式只適合訓(xùn)練數(shù)據(jù)量比較小的情況下使用。
三、fit_generator
利用Python的生成器,逐個(gè)生成數(shù)據(jù)的batch并進(jìn)行訓(xùn)練,不占用大量內(nèi)存,同時(shí)生成器與模型將并行執(zhí)行以提高效率。例如,該函數(shù)允許我們?cè)贑PU上進(jìn)行實(shí)時(shí)的數(shù)據(jù)提升,同時(shí)在GPU上進(jìn)行模型訓(xùn)練
接口如下:
fit_generator(self, generator, steps_per_epoch, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, class_weight=None, max_q_size=10, workers=1, pickle_safe=False, initial_epoch=0)
generator:生成器函數(shù)
steps_per_epoch:整數(shù),當(dāng)生成器返回steps_per_epoch次數(shù)據(jù)時(shí),計(jì)一個(gè)epoch結(jié)束,執(zhí)行下一個(gè)epoch。也就是一個(gè)epoch下執(zhí)行多少次batch_size。
epochs:整數(shù),控制數(shù)據(jù)迭代的輪數(shù),到了就結(jié)束訓(xùn)練。
callbacks=None, list,list中的元素為keras.callbacks.Callback對(duì)象,在訓(xùn)練過程中會(huì)調(diào)用list中的回調(diào)函數(shù)
舉例:
def generate_arrays_from_file(path):
while True:
with open(path) as f:
for line in f:
# create numpy arrays of input data
# and labels, from each line in the file
x1, x2, y = process_line(line)
yield ({'input_1': x1, 'input_2': x2}, {'output': y})
model.fit_generator(generate_arrays_from_file('./my_folder'),
steps_per_epoch=10000, epochs=10)
補(bǔ)充:keras.fit_generator()屬性及取值
如下所示:
fit_generator(self, generator,
steps_per_epoch=None,
epochs=1,
verbose=1,
callbacks=None,
validation_data=None,
validation_steps=None,
class_weight=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False,
shuffle=True,
initial_epoch=0)
通過Python generator產(chǎn)生一批批的數(shù)據(jù)用于訓(xùn)練模型。generator可以和模型并行運(yùn)行,例如,可以使用CPU生成批數(shù)據(jù)同時(shí)在GPU上訓(xùn)練模型。
參數(shù):
generator:一個(gè)generator或Sequence實(shí)例,為了避免在使用multiprocessing時(shí)直接復(fù)制數(shù)據(jù)。
steps_per_epoch:從generator產(chǎn)生的步驟的總數(shù)(樣本批次總數(shù))。通常情況下,應(yīng)該等于數(shù)據(jù)集的樣本數(shù)量除以批量的大小。
epochs:整數(shù),在數(shù)據(jù)集上迭代的總數(shù)。
works:在使用基于進(jìn)程的線程時(shí),最多需要啟動(dòng)的進(jìn)程數(shù)量。
use_multiprocessing:布爾值。當(dāng)為True時(shí),使用基于基于過程的線程。
例如:
datagen = ImageDataGenator(...)
model.fit_generator(datagen.flow(x_train, y_train,
batch_size=batch_size),
epochs=epochs,
validation_data=(x_test, y_test),
workers=4)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django提示mysql版本過低:django.db.utils.NotSupportedError: My
這篇文章主要介紹了Django提示mysql版本過低:django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26).的解決方法,文中有詳細(xì)的解決方案,具有一定的參考價(jià)值,需要的朋友可以參考下2024-03-03
Django中更改默認(rèn)數(shù)據(jù)庫為mysql的方法示例
這篇文章主要介紹了Django中更改默認(rèn)數(shù)據(jù)庫為mysql的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
Python使用pyinstaller打包含有g(shù)ettext?locales語言環(huán)境的項(xiàng)目(推薦)
最近在用 pyhton 做一個(gè)圖片處理的小工具,順便接觸了gettext,用來實(shí)現(xiàn)本地化化中英文轉(zhuǎn)換,本文通過一個(gè)項(xiàng)目給大家詳細(xì)介紹下,感興趣的朋友跟隨小編一起看看吧2022-01-01
Python腳本實(shí)現(xiàn)自動(dòng)刪除C盤臨時(shí)文件夾
在日常使用電腦的過程中,臨時(shí)文件夾往往會(huì)積累大量的無用數(shù)據(jù),占用寶貴的磁盤空間,下面我們就來看看Python如何通過腳本實(shí)現(xiàn)自動(dòng)刪除C盤臨時(shí)文件夾吧2025-01-01
numpy數(shù)組之讀寫文件的實(shí)現(xiàn)
本文主要介紹了numpy數(shù)組之讀寫文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Python三級(jí)目錄展示的實(shí)現(xiàn)方法
這篇文章主要介紹了Python三級(jí)目錄展示的實(shí)現(xiàn)方法的相關(guān)資料,本文通過圖文并茂的方式給大家介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
python開發(fā)實(shí)時(shí)可視化儀表盤的示例
這篇文章主要介紹了python開發(fā)實(shí)時(shí)可視化儀表盤的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-05-05

