第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

使用 fit_generator 時(shí),Keras 模型的批量大小為 1

使用 fit_generator 時(shí),Keras 模型的批量大小為 1

阿波羅的戰(zhàn)車 2022-01-18 21:34:43
當(dāng)我使用我的批處理生成器 fit_generator 它使用 1 的批處理大小時(shí),它會為每個(gè)時(shí)期增加 1 步。我究竟做錯(cuò)了什么。我已嘗試更改批處理生成器的批處理大小參數(shù),但仍然相同。我的批處理生成器功能:def batchGenerator(imgs, steerings, batchSize, isTraining):    while True:        batchImg = []        batchSteering = []        for i in range(batchSize):            randIndex = random.randint(0, len(imgs) - 1)            if isTraining:                img, steering = randomAugment(imgs[randIndex], steerings[randIndex])            else:                img = imgs[randIndex]                steering = steerings[randIndex]            img = imgPreprocess(img)            batchImg.append(img)            batchSteering.append(steering)        yield (np.asarray(batchImg), np.asarray(batchSteering))這是我的 fit_generator 參數(shù):history = model.fit_generator(batchGenerator(X_train, y_train, 300, 1),                              steps_per_epoch = 300,                              epochs = 10,                              validation_data = batchGenerator(X_valid, y_valid, 200, 0),                              validation_steps = 200,                              verbose = 1,                              shuffle = 1)當(dāng)我運(yùn)行它時(shí),批量大小似乎是 1,因?yàn)閷τ诿總€(gè) epoch,它都會增加 1。對于每個(gè) epoch,它會執(zhí)行 0/300、1/300、2/300、3/300 等。到底是怎么回事?
查看完整描述

3 回答

?
紫衣仙女

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊

您的生成器沒有問題,您的代碼也很好。您解釋輸出的方式是錯(cuò)誤的。

從文檔中,您可以看到

steps_per_epoch:整數(shù)或無。在宣布一個(gè)時(shí)期完成并開始下一個(gè)時(shí)期之前的步驟總數(shù)(樣本批次)。當(dāng)使用輸入張量(例如 TensorFlow 數(shù)據(jù)張量)進(jìn)行訓(xùn)練時(shí),默認(rèn)的 None 等于數(shù)據(jù)集中的樣本數(shù)除以批量大小,如果無法確定,則為 1。

通常steps_per_epochs設(shè)置為X_train.shape[0]//batch_size

在訓(xùn)練時(shí),訓(xùn)練是steps_per_epochs分批完成的,一個(gè) epoch 被視為已完成。由于數(shù)據(jù)是按隨機(jī)順序獲取的,因此沒有其他方法可以告訴模型一個(gè)時(shí)期已經(jīng)結(jié)束。

在訓(xùn)練時(shí)你可以看到0/300, 1/300, 2/300, 3/300等等直到300/300。這是很正常的。這意味著您的模型300針對每個(gè)步驟的批處理大小進(jìn)行了訓(xùn)練300(因?yàn)槟鷮⑴幚泶笮≈付?300)

如果您給出批量大小,比如說 10,并且100在訓(xùn)練時(shí)可以看到steps_per_epoch1/100, 2/100等等,那么100/100這意味著,您的模型經(jīng)過了100步驟訓(xùn)練,并且每個(gè)步驟本質(zhì)上都是一批10樣本


查看完整回答
反對 回復(fù) 2022-01-18
?
繁星點(diǎn)點(diǎn)滴滴

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊

您steps_per_epoch應(yīng)該始終將訓(xùn)練數(shù)據(jù)的長度除以batch_size,即在這種情況下X_train.shape[0]//batch_size。


此外,您使用隨機(jī)索引對數(shù)據(jù)進(jìn)行洗牌的方式,這意味著一些樣本可能會被多次選擇,而另一些則永遠(yuǎn)不會。您還可以考慮先隨機(jī)打亂整個(gè)訓(xùn)練集,然后選擇連續(xù)批次的數(shù)據(jù)進(jìn)行訓(xùn)練。我只是想指出這一點(diǎn),如果你錯(cuò)過了。


編輯

def batchGenerator(imgs, steerings, batchsize, isTraining):

    while True:

        start = 0

        end = batchsize


        while start  < len(imgs): 

            x = imgs[start:end]

            y = steerings[start:end]

            if isTraining:            

                x , y = randomAugment(x, y)

            

            yield x, y


            start += batchsize

            end += batchsize

也許嘗試這樣的事情。如果可行,您可以稍后處理洗牌。


查看完整回答
反對 回復(fù) 2022-01-18
?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊

與該fit函數(shù)相比, 的輸出fit_generator是批次計(jì)數(shù),而不是訓(xùn)練示例的計(jì)數(shù)。因此,增量 1 表示已處理了更多批次。由steps_per_epoch您定義每個(gè)時(shí)期將處理多少批次。

根據(jù)定義,當(dāng)每個(gè)訓(xùn)練示例處理一次時(shí),一個(gè) epoch 就結(jié)束了。這就是為什么人們建議將 steps_per_epoch 設(shè)置為:

steps_per_epoch=number_of_examples//batch_size


查看完整回答
反對 回復(fù) 2022-01-18
  • 3 回答
  • 0 關(guān)注
  • 254 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號