Pytorch 訓練過程中出現的問題
阿新 • • 發佈:2021-09-29
簡單記錄一些自己再深度學習過程中出現的問題
each element in list of batch should be of equal size
File "/home/vase/software/miniconda3/envs/d2l/lib/python3.8/site-packages/torch/utils/data/_utils/collate.py", line 83, in <listcomp> return [default_collate(samples) for samples in transposed] File "/home/vase/software/miniconda3/envs/d2l/lib/python3.8/site-packages/torch/utils/data/_utils/collate.py", line 81, in default_collate raise RuntimeError('each element in list of batch should be of equal size') RuntimeError: each element in list of batch should be of equal size
程式碼中這部分表示自定義DataLoader的時候再__getitem__() 的時候輸出的list長度不一致,
這裡如果是bbox本來就輸出多個不同數量的結果可以嘗試自己自定義collate() 這個方法
collate是輸入一個batch,之後對batch進行處理,這要保證batch中的元素都是相同長度的(list的長度)
如果不同的話就需要自己進行處理
我的問題是__getitem__() 輸出的是map 而不是list,這樣對預設的collate就無法識別了,
有兩種簡單的解決方法
- getitem()return前將自己的map包裹成list
def __getitem__(self,i): sample = dict() # 一堆程式碼 處理sample這個map return list(sample)
- 再DataLoader處新增簡單的collate_fn逐個輸出map內容
data_loader = DataLoader(
datasets,
batch_size = dataset_cfg.batch_size,
collate_fn=lambda x:x,
)