tensorflow訓練時警告:BaseCollectiveExecutor::StartAbort Out of range: End of sequence

介個殺手不太冷發表於2021-01-02

在訓練的時候一直有這個警告,紅紅的在一堆訓資訊中間很突兀,之前沒去管它,現在決定除掉它!簡單查詢訊息後大概知道是迭代器到了序列末尾沒有停止的原因,比如訓練集大小是60000,你設定的batchsize是128,那麼一個epoch中會有多少個step呢?很容易計算得到60000/128=468.75,這裡出現的小數,說明最後一個step的資料不夠128,從輸出資訊可以知道最後跑了是469個step,如下,可以看到警告資訊:

 那麼一下子就想到是不是把batchsize設定成能被訓練集大小整除問題就解決了那呢?經過試驗,我將batchsize設定成200,跑了300個step是沒錯,但是warning還是有哇。

再去網上搜尋了一遍,最後試驗了這麼一種方法:加上預處理資料集的時候repeat()函式設定為空(不要有引數),在fit()函式中加入step_per_epoch引數,設定其等於訓練集大小整除於batchsize,如下所示:

再次執行一遍,此時討厭的紅色warning沒有啦!

 

 

具體原理暫不深究,等以後再遇到相關問題再答。

相關文章