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

淺談keras2 predict和fit_generator的坑

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

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

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

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

說明:

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

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

經(jīng)驗(yàn):

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

2、fit_generator

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

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

batch_size = 1,會(huì)性能非常低。

經(jīng)驗(yàn):

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

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

為什么要使用model.fit_generator?

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

其中各項(xiàng)的具體解釋,請(qǐng)參考Keras中文文檔

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

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

一個(gè) (inputs, targets) 元組

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

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

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

自己定義一個(gè) Sequence (keras.utils.Sequence) 對(duì)象

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

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

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

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

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

具體實(shí)現(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)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

泽州县| 凤台县| 巩义市| 鄂伦春自治旗| 丹寨县| 萨嘎县| 荥阳市| 定州市| 磐安县| 宣威市| 大宁县| 义乌市| 涿鹿县| 临汾市| 莱阳市| 邵阳县| 崇州市| 汕尾市| 余干县| 招远市| 岳阳市| 景德镇市| 泸溪县| 乐平市| 遂宁市| 临朐县| 云阳县| 湟源县| 烟台市| 衡水市| 平顶山市| 临安市| 金平| 亚东县| 长宁区| 丹阳市| 久治县| 平顶山市| 涿鹿县| 汝阳县| 建阳市|