天天看點

Pytorch每次訓練到Epoch1最後出現size不比對的一個可能原因原因:解決:總結

原因:

在網絡本身有随機變量的情況下,随機變量很可能是在定義網絡時按照預設的batchSzie确定的次元。這樣,如果總的訓練集的Size不能被batchSize整除,就會出現網絡輸入資料的Size和生成的随機變量的size在Batchsize那個次元上不比對的問題,進而報錯。

解決:

調整BatchSize使其能夠整除Size;

調整資料集大小使其能夠被BatchSize整除。

檢查輸入資料的batchsize,當它和預設的batchsize不比對時強行補齊;

總結

之前一直以為在使用dataLoader的時候不會出現這種問題,而且也沒有跑過額外産生随機變量的網絡。今天首次遇到這個問題。在訓練有自生成随機變量的網絡時要特别注意該問題。

===============2020年10月16日 21:23:23更新==============================================

上述問題應該(沒有去試但根據文檔應該沒問題)可以通過設定dataloader的drop_last 參數去解決,這才應該是标準解法。

drop_last (bool, optional) – set to

True

to drop the last incomplete batch, if the dataset size is not divisible by the batch size. If

False

and the size of dataset is not divisible by the batch size, then the last batch will be smaller. (default: False)

參考:https://pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader

繼續閱讀