欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Keras中fit()和fit_generator()的區(qū)別及其參數(shù)的坑

 更新時(shí)間:2021年05月17日 11:14:02   作者:MrLeaper  
這篇文章主要介紹了Keras中fit()和fit_generator()的區(qū)別及其參數(shù)的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1、fit和fit_generator的區(qū)別

首先Keras中的fit()函數(shù)傳入的x_train和y_train是被完整的加載進(jìn)內(nèi)存的,當(dāng)然用起來很方便,但是如果我們數(shù)據(jù)量很大,那么是不可能將所有數(shù)據(jù)載入內(nèi)存的,必將導(dǎo)致內(nèi)存泄漏,這時(shí)候我們可以用fit_generator函數(shù)來進(jìn)行訓(xùn)練。

下面是fit傳參的例子:

history = model.fit(x_train, y_train, epochs=10,batch_size=32, 
                    validation_split=0.2)

這里需要給出epochs和batch_size,epoch是這個(gè)數(shù)據(jù)集要被輪多少次,batch_size是指這個(gè)數(shù)據(jù)集被分成多少個(gè)batch進(jìn)行處理。

最后可以給出交叉驗(yàn)證集的大小,這里的0.2是指在訓(xùn)練集上占比20%。

fit_generator函數(shù)必須傳入一個(gè)生成器,我們的訓(xùn)練數(shù)據(jù)也是通過生成器產(chǎn)生的,下面給出一個(gè)簡單的生成器函數(shù):

batch_size = 128
def generator():
    while 1:
        row = np.random.randint(0,len(x_train),size=batch_size)
        x = np.zeros((batch_size,x_train.shape[-1]))
        y = np.zeros((batch_size,))
        x = x_train[row]
        y = y_train[row]
        yield x,y

這里的生成器函數(shù)我產(chǎn)生的是一個(gè)batch_size為128大小的數(shù)據(jù),這只是一個(gè)demo。如果我在生成器里沒有規(guī)定batch_size的大小,就是每次產(chǎn)生一個(gè)數(shù)據(jù),那么在用fit_generator時(shí)候里面的參數(shù)steps_per_epoch是不一樣的。

這里的坑我困惑了好久,雖然不是什么大問題

下面是fit_generator函數(shù)的傳參:

history = model.fit_generator(generator(),epochs=epochs,steps_per_epoch=len(x_train)//(batch_size*epochs))

2、batch_size和steps_per_epoch的區(qū)別

首先batch_size = 數(shù)據(jù)集大小/steps_per_epoch的,如果我們?cè)谏珊瘮?shù)里設(shè)置了batch_size的大小,那么在fit_generator傳參的時(shí)候,,steps_per_epoch=len(x_train)//(batch_size*epochs)

我得完整demo代碼:

from keras.datasets import imdb
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras import layers
import numpy as np
import random
from sklearn.metrics import f1_score,accuracy_score
max_features = 10000
maxlen = 500
batch_size = 32
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
x_train = pad_sequences(x_train,maxlen=maxlen)
x_test = pad_sequences(x_test,maxlen=maxlen)
 
def generator():
    while 1:
        row = np.random.randint(0,len(x_train),size=batch_size)
        x = np.zeros((batch_size,x_train.shape[-1]))
        y = np.zeros((batch_size,))
        x = x_train[row]
        y = y_train[row]
        yield x,y
# generator()
 
model = Sequential()
model.add(layers.Embedding(max_features,32,input_length=maxlen))
model.add(layers.GRU(64,return_sequences=True))
model.add(layers.GRU(32))
# model.add(layers.Flatten())
# model.add(layers.Dense(32,activation='relu'))
 
model.add(layers.Dense(1,activation='sigmoid'))
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['acc'])
print(model.summary())
 
# history = model.fit(x_train, y_train, epochs=1,batch_size=32, validation_split=0.2)
history = model.fit_generator(generator(),epochs=1,steps_per_epoch=len(x_train)//(batch_size)) 
 
print(model.evaluate(x_test,y_test))
y = model.predict_classes(x_test) 
print(accuracy_score(y_test,y))

補(bǔ)充:model.fit_generator()詳細(xì)解讀

如下所示:

from keras import models
model = models.Sequential()

首先

利用keras,搭建順序模型,具體搭建步驟省略。完成搭建后,我們需要將數(shù)據(jù)送入模型進(jìn)行訓(xùn)練,送入數(shù)據(jù)的方式有很多種,models.fit_generator()是其中一種方式。

具體說,model.fit_generator()是利用生成器,分批次向模型送入數(shù)據(jù)的方式,可以有效節(jié)省單次內(nèi)存的消耗。

具體函數(shù)形式如下:

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)

參數(shù)解釋:

generator:一般是一個(gè)生成器函數(shù);

steps_per_epochs:是指在每個(gè)epoch中生成器執(zhí)行生成數(shù)據(jù)的次數(shù),若設(shè)定steps_per_epochs=100,這情況如下圖所示;

epochs:指訓(xùn)練過程中需要迭代的次數(shù);

verbose:默認(rèn)值為1,是指在訓(xùn)練過程中日志的顯示模式,取 1 時(shí)表示“進(jìn)度條模式”,取2時(shí)表示“每輪一行”,取0時(shí)表示“安靜模式”;

validation_data, validation_steps指驗(yàn)證集的情況,使用方式和generator, steps_per_epoch相同;

models.fit_generator()會(huì)返回一個(gè)history對(duì)象,history.history 屬性記錄訓(xùn)練過程中,連續(xù) epoch 訓(xùn)練損失和評(píng)估值,以及驗(yàn)證集損失和評(píng)估值,可以通過以下方式調(diào)取這些值!

acc = history.history["acc"]
val_acc = history.history["val_acc"]
loss = history.history["loss"]
val_loss = history.history["val_loss"]

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決Django中修改js css文件但瀏覽器無法及時(shí)與之改變的問題

    解決Django中修改js css文件但瀏覽器無法及時(shí)與之改變的問題

    今天小編就為大家分享一篇解決Django中修改js css文件但瀏覽器無法及時(shí)與之改變的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python簡單實(shí)現(xiàn)操作Mysql數(shù)據(jù)庫

    python簡單實(shí)現(xiàn)操作Mysql數(shù)據(jù)庫

    本文給大家分享的是在python中使用webpy實(shí)現(xiàn)簡單的數(shù)據(jù)庫增刪改查操作的方法,非常的簡單,有需要的小伙伴可以參考下
    2018-01-01
  • 基于python實(shí)現(xiàn)藍(lán)牙通信代碼實(shí)例

    基于python實(shí)現(xiàn)藍(lán)牙通信代碼實(shí)例

    這篇文章主要介紹了基于python實(shí)現(xiàn)藍(lán)牙通信代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python的subprocess模塊總結(jié)

    Python的subprocess模塊總結(jié)

    這篇文章主要介紹了Python的subprocess模塊總結(jié),本文詳細(xì)講解了subprocess模塊參數(shù)及Popen方法,然后給出了多個(gè)使用實(shí)例,需要的朋友可以參考下
    2014-11-11
  • 使用celery執(zhí)行Django串行異步任務(wù)的方法步驟

    使用celery執(zhí)行Django串行異步任務(wù)的方法步驟

    這篇文章主要介紹了使用celery執(zhí)行Django串行異步任務(wù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python多進(jìn)程加鎖的實(shí)現(xiàn)

    Python多進(jìn)程加鎖的實(shí)現(xiàn)

    很多時(shí)候,我們需要在多個(gè)進(jìn)程中同時(shí)寫一個(gè)文件,如果不加鎖機(jī)制,就會(huì)導(dǎo)致寫文件錯(cuò)亂,本文主要介紹了Python多進(jìn)程加鎖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),感興趣的可以了解一下
    2023-07-07
  • 詳解Python中迭代器和生成器的原理與使用

    詳解Python中迭代器和生成器的原理與使用

    關(guān)于python中迭代器,生成器介紹的文章不算少數(shù),有些寫的也很透徹,但是更多的是碎片化的內(nèi)容。本篇嘗試用系統(tǒng)的介紹三者的概念和關(guān)系,需要的可以參考一下
    2022-05-05
  • python接口自動(dòng)化使用requests庫發(fā)送http請(qǐng)求

    python接口自動(dòng)化使用requests庫發(fā)送http請(qǐng)求

    這篇文章主要介紹了python接口自動(dòng)化使用requests庫發(fā)送http請(qǐng)求,HTTP協(xié)議?,一個(gè)基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù),包括html文件、圖像、結(jié)果等,即是一個(gè)客戶端和服務(wù)器端請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)
    2022-08-08
  • Python?Flask?上傳文件測(cè)試示例

    Python?Flask?上傳文件測(cè)試示例

    這篇文章主要為大家介紹了Python?Flask?上傳文件測(cè)試的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • pyside+pyqt實(shí)現(xiàn)鼠標(biāo)右鍵菜單功能

    pyside+pyqt實(shí)現(xiàn)鼠標(biāo)右鍵菜單功能

    這篇文章主要為大家詳細(xì)介紹了pyside+pyqt實(shí)現(xiàn)鼠標(biāo)右鍵菜單功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02

最新評(píng)論