最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談keras2 predict和fit_generator的坑

 更新時間:2020年06月17日 15:02:49   作者:BYR_jiandong  
這篇文章主要介紹了淺談keras2 predict和fit_generator的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

1、使用predict時,必須設(shè)置batch_size,否則效率奇低。

查看keras文檔中,predict函數(shù)原型:

predict(self, x, batch_size=32, verbose=0)

說明:

只使用batch_size=32,也就是說每次將batch_size=32的數(shù)據(jù)通過PCI總線傳到GPU,然后進行預(yù)測。在一些問題中,batch_size=32明顯是非常小的。而通過PCI傳數(shù)據(jù)是非常耗時的。

所以,使用的時候會發(fā)現(xiàn)預(yù)測數(shù)據(jù)時效率奇低,其原因就是batch_size太小了。

經(jīng)驗:

使用predict時,必須人為設(shè)置好batch_size,否則PCI總線之間的數(shù)據(jù)傳輸次數(shù)過多,性能會非常低下。

2、fit_generator

說明:keras 中 fit_generator參數(shù)steps_per_epoch已經(jīng)改變含義了,目前的含義是一個epoch分成多少個batch_size。舊版的含義是一個epoch的樣本數(shù)目。

如果說訓(xùn)練樣本樹N=1000,steps_per_epoch = 10,那么相當(dāng)于一個batch_size=100,如果還是按照舊版來設(shè)置,那么相當(dāng)于

batch_size = 1,會性能非常低。

經(jīng)驗:

必須明確fit_generator參數(shù)steps_per_epoch

補充知識:Keras:創(chuàng)建自己的generator(適用于model.fit_generator),解決內(nèi)存問題

為什么要使用model.fit_generator?

在現(xiàn)實的機器學(xué)習(xí)中,訓(xùn)練一個model往往需要數(shù)量巨大的數(shù)據(jù),如果使用fit進行數(shù)據(jù)訓(xùn)練,很有可能導(dǎo)致內(nèi)存不夠,無法進行訓(xùn)練。

fit_generator的定義如下:

fit_generator(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)

其中各項的具體解釋,請參考Keras中文文檔

我們重點關(guān)注的是generator參數(shù):

generator: 一個生成器,或者一個 Sequence (keras.utils.Sequence) 對象的實例, 以在使用多進程時避免數(shù)據(jù)的重復(fù)。 生成器的輸出應(yīng)該為以下之一:

一個 (inputs, targets) 元組

一個 (inputs, targets, sample_weights) 元組。

那么,問題來了,如何構(gòu)建這個generator呢?有以下幾種辦法:

自己創(chuàng)建一個generator生成器

自己定義一個 Sequence (keras.utils.Sequence) 對象

使用Keras自帶的ImageDataGenerator和.flow/.flow_from_dataframe/.flow_from_directory來生成一個generator

1.自己創(chuàng)建一個generator生成器

使用Keras自帶的ImageDataGenerator和.flow/.flow_from_dataframe/.flow_from_directory 靈活度不高,只有當(dāng)數(shù)據(jù)集滿足一定格式(例如,按照分類文件夾存放)或者具備一定條件時,使用才使用才較為方便。

此時,自己創(chuàng)建一個generator就很重要了,關(guān)于python的generator是什么原理,怎么使用,就不加贅述,可以查看python的基本語法。

此處,我們用yield來返回數(shù)據(jù)組,標(biāo)簽組,從而使fit_generator可以調(diào)用我們的generator來成批處理數(shù)據(jù)。

具體實現(xiàn)如下:

  def myGenerator(batch_size):
    # loading data
    X_train,Y_train=load_data(...)
    
    # data processing
    # ................
    
    total_size=X_train.size
    #batch_size means how many data you want to train one step
    
    while 1:
      for i in range(total_size//batch_size):
        yield x_train[i*batch_size:(i+1)*batch_size], y[i*batch_size:(i+1)*batch_size]
  return myGenerator

接著你可以調(diào)用該生成器:

self._model.fit_generator(myGenerator(batch_size),steps_per_epoch=total_size//batch_size, epochs=epoch_num)

以上這篇淺談keras2 predict和fit_generator的坑就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

永登县| 高淳县| 莱芜市| 东阳市| 镇平县| 梁平县| 安远县| 民乐县| 丰台区| 芒康县| 溧水县| 江华| 肥城市| 沂源县| 聂拉木县| 枣阳市| 大理市| 翁源县| 巴彦淖尔市| 江都市| 安溪县| 宁远县| 日喀则市| 商都县| 垫江县| 酒泉市| 南昌县| 太保市| 施秉县| 瓮安县| 恩平市| 鱼台县| 神农架林区| 三穗县| 茂名市| 福清市| 威宁| 怀柔区| 易门县| 钟山县| 鹰潭市|