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
樣本

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
也許嘗試這樣的事情。如果可行,您可以稍后處理洗牌。

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
添加回答
舉報(bào)