Python 3.x 类型错误:';元组';对象在创建数据生成器时不能解释为整数

Python 3.x 类型错误:';元组';对象在创建数据生成器时不能解释为整数,python-3.x,deep-learning,pytorch,data-generation,Python 3.x,Deep Learning,Pytorch,Data Generation,我是PyTorch的新手,正在学习创建用于分段的批量数据。代码如下所示: class NumbersDataset(Dataset): def __init__(self): self.X = list(df['input_img']) self.y = list(df['mask_img']) def __len__(self): return len(self.X), len(self.y) def __getite

我是PyTorch的新手,正在学习创建用于分段的批量数据。代码如下所示:

class NumbersDataset(Dataset):
    def __init__(self):
        self.X = list(df['input_img'])
        self.y = list(df['mask_img'])

    def __len__(self):
        return len(self.X), len(self.y)

    def __getitem__(self, idx):
        return self.X[idx], self.y[idx]


if __name__ == '__main__':
    dataset = NumbersDataset()
    dataloader = DataLoader(dataset, batch_size=50, shuffle=True, num_workers=2)
    # print(len(dataset))
    # plt.imshow(dataset[100])
    # plt.show()
    print(next(iter(dataloader)))
其中,
df['input_img']
列包含图像的位置(
'/path/to/pic/480p/boxing fisheye/00010.jpg'
)和
df['mask_img']
包含所有遮罩图像的位置。我正在尝试加载图像,但出现错误:

TypeError:“tuple”对象不能解释为整数

但是,如果我不使用
DataLoader
,只需执行以下操作:

     dataset = NumbersDataset()
     print(len(dataset))
     print(dataset[10:20])

然后我得到了我所期望的。有人能告诉我我做错了什么吗?

您不能为
\uuu len\uu
方法返回
元组。预期类型为
int

# perhaps you can add the list length's for the total length
# but no matter how you choose to implement the method you can
# only return on value of type integer `int`
def __len__(self):
    return len(self.X) + len(self.y)

如果我只返回self.X的长度会怎么样?行吗?我猜它只需要长度,这样它就可以遍历这些值。我知道一个事实,
X
y
的长度应该是相同的。这更多是一个由您决定的实现细节。错误是当
数据加载器将其视为单个
int
时,您试图返回两个值,如果不是,则返回失败。您能告诉我为什么没有
数据加载器它可以工作吗?这有区别吗?因为
DataLoader
要求长度属性的类型为
int
的单个值。可能是因为它正在添加或使用
\uuu len\uuu
中的值来进行一些计算。如果该值不是整数,则计算失败。例如,运行
(1,2)+1
失败,因为您无法对类型
元组执行数学运算。非常感谢。