1. 程式人生 > 其它 >Pytorch 訓練過程中出現的問題

Pytorch 訓練過程中出現的問題

簡單記錄一些自己再深度學習過程中出現的問題

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就無法識別了,

有兩種簡單的解決方法

  1. getitem()return前將自己的map包裹成list
def __getitem__(self,i):
    sample = dict()
    # 一堆程式碼 處理sample這個map
    return list(sample)
  1. 再DataLoader處新增簡單的collate_fn逐個輸出map內容
        data_loader = DataLoader(
            datasets, 
            batch_size = dataset_cfg.batch_size, 
            collate_fn=lambda x:x,
        )

來源:https://github.com/pytorch/pytorch/issues/42654