首页 > 解决方案 > tqdm 迭代超出可迭代范围

问题描述

我正在使用 tqdm 来迭代我的 val_loader。但是,它返回以下错误:

Traceback (most recent call last):
  File "Develop_Model_2.py", line 261, in <module>
    None)
  File "Develop_Model_2.py", line 217, in training_loop
    for X, y in pbar:
  File "/usr/local/lib/python3.6/dist-packages/tqdm/std.py", line 1178, in __iter__
    for obj in iterable:
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py", line 517, in __next__
    data = self._next_data()
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py", line 557, in _next_data
    data = self._dataset_fetcher.fetch(index)  # may raise StopIteration
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in <listcomp>
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataset.py", line 330, in __getitem__
    return self.dataset[self.indices[idx]]
  File "Develop_Model_2.py", line 72, in __getitem__
    yimg = Image.open(self.maskList[index]).convert('L')
IndexError: list index out of range

有没有人知道为什么会发生这种情况,因为我无法从我的代码中弄清楚。似乎问题是来自 tqdm 的最终迭代超出了界限。

pbar = tqdm(val_loader, total = len(val_loader))
for X, y in pbar:
    torch.cuda.empty_cache()
    X = X.to(device).float()
    y = y.to(device).float()
    model.eval()
    ypred = model(X)

    val_loss_arr.append(loss_fn(ypred, y).item())
    pixelacctest.append(pixelAcc(y, ypred))
    meanioutest.append(meanIOU(y, ypred))

    pbar.set_postfix({'Epoch':epoch+1+prevEpoch,
                      'Validation Loss': np.mean(val_loss_arr),
                      'Mean IOU': np.mean(meanioutest),
                      'Pixel Acc': np.mean(pixelacctest)
                     })

标签: pythontqdm

解决方案


推荐阅读