IndexError:在 PyTorch 训练步骤中,“索引 1 超出了尺寸为 1 的维度 0 的范围”

问题描述 投票:0回答:1

我目前正在使用 PyTorch 执行对象检测任务,并在训练步骤中遇到“IndexError”。错误信息如下:

IndexError: index 1 is out of bounds for dimension 0 with size 1

为了提供一些上下文,我有一个数据加载器,用于加载图像及其相应的目标,其中包括边界框和标签。当我打印第一批时,数据加载器正在生成以下输出:

print(next(iter(data_loader_train)))
out:
((<PIL.Image.Image image mode=RGB size=640x640 at 0x7BE2368E08E0>, <PIL.Image.Image image mode=RGB size=640x640 at 0x7BE2368E07F0>), ({'boxes': tensor([[ 51., 347.,  73., 358.],
        [183., 340., 210., 349.],
        [409., 324., 436., 336.],
        [356., 298., 365., 302.],
        [396., 289., 403., 293.]]), 'labels': tensor([0]), 'image_id': tensor([160]), 'area': tensor([242., 243., 324.,  36.,  28.])}, {'boxes': tensor([[141., 339., 186., 357.],
        [420., 255., 430., 258.],
        [361., 257., 373., 261.]]), 'labels': tensor([0]), 'image_id': tensor([167]), 'area': tensor([810.,  30.,  48.])}))

这是我的训练循环:

def train_one_epoch(model, optimizer, data_loader, device):
    model.train()
    total_loss = 0
    for images, targets in data_loader:
        images = list(transform(image).to(device) for image in images)

        targets = [{k: v.to(device) for k, v in t.items()} for t in targets]

        loss_dict = model(images, targets)

        losses = sum(loss for loss in loss_dict.values())
        total_loss += losses
        optimizer.zero_grad()
        losses.backward()
        optimizer.step()
    return total_loss / data_loader.__len__()

# let's train it for 10 epochs
num_epochs = 10
for epoch in range(num_epochs):
    # train for one epoch, printing every 10 iterations
    loss = train_one_epoch(model, optimizer, data_loader_train, device)
    # update the learning rate
    print('epoch [{}]:  \t lr: {}  \t loss: {}  '.format(epoch, lr_scheduler.get_lr(), loss))
    lr_scheduler.step()

当尝试访问超出范围的索引时,torchvision 模型的“roi_heads.py”中的“assign_targets_to_proposals”方法中会出现错误。

我已经验证了数据加载过程并检查了边界框和标签的尺寸。我还尝试在代码中的各个点打印张量,看看是否存在任何差异。但是,我在数据中找不到任何明显的问题。

我希望训练过程能够顺利进行,不会出现任何错误。应正确加载数据,并且应针对指定的时期数对模型进行训练。

我不确定为什么会发生此错误,如果您能提供有关如何解决此错误的见解或建议,我将不胜感激。谢谢!

python indexing pytorch torchvision pytorch-dataloader
1个回答
0
投票

我在模型训练期间遇到了同样的错误,并重塑我的数据修复了它。

y = df.iloc[:,-1].values.reshape(-1, 1)

更改值以适合您的数据。

© www.soinside.com 2019 - 2024. All rights reserved.