首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的代码找不到使用py手电筒初始化的实例。

我的代码找不到使用py手电筒初始化的实例。
EN

Stack Overflow用户
提问于 2022-05-10 07:05:50
回答 1查看 19关注 0票数 0

我实现了dataset类来使用模型,并且当我设置训练时,会出现错误。

代码语言:javascript
复制
Traceback (most recent call last):
  File "model.py", line 146, in <module>
    train = Train()
  File "model.py", line 70, in __init__
    self.dataset.get_label()
  File "model.py", line 61, in get_label
    return self.label
AttributeError: 'MaskDataset' object has no attribute 'label'

而下面的代码是错误的。但我不知道为什么会有问题。我检查'self.imgs‘和'self.label’使用的打印(self.imgs)和打印(self.label)。而且很完美。

我的意思是,我不知道为什么python解释器找不到创建初始化的实例。

代码语言:javascript
复制
class MaskDataset(object):
def __init__(self, transforms,path):
    self.data = data.Data()
    self.transform = transforms
    self.path = path

    if 'Validation' in self.path :
        self.img_path = "/home/ubuntu/lecttue-diagonosis/YangDongJae/ai/data/Validation/images/"
        self.lab_path = "/home/ubuntu/lecttue-diagonosis/YangDongJae/ai/data/Validation/annotations/"
        self.label = list(sorted(os.listdir(self.lab_path)))
        self.imgs = list(sorted(os.listdir(self.img_path)))

    elif 'train' in self.path:
        self.img_path = "/home/ubuntu/lecttue-diagonosis/YangDongJae/ai/data/Training/images/"
        self.lab_path = "/home/ubuntu/lecttue-diagonosis/YangDongJae/ai/data/Training/annotations/"
        self.label = list(sorted(os.listdir(self.lab_path)))
        self.imgs = list(sorted(os.listdir(self.img_path)))
代码语言:javascript
复制
    def __getitem__(self,idx):
        file_image = self.imgs[idx]
        file_label = self.label[idx]
        img_path = self.img_path+file_image
        label_path = self.lab_path + file_label

        img = Image.open(img_path).convert("RGB")
        target = self.data.generate_target(label_path)

        if self.transform is not None:
            img = self.transform(img)

        return img, target
代码语言:javascript
复制
class Train(MaskDataset):
    def __init__(self,epochs = 100, lr = 0.005, momentum = 0.9, weight_decay = 0.0005):
        self.data_transform = transforms.Compose([  # transforms.Compose : list 내의 작업을 연달아 할 수 있게 호출하는 클래스
                transforms.ToTensor() # ToTensor : numpy 이미지에서 torch 이미지로 변경
            ])

        self.dataset = MaskDataset(self.data_transform,'/home/ubuntu/lecttue-diagonosis/YangDongJae/ai/data/Training/')
        self.val_dataset = MaskDataset(self.data_transform, '/home/ubuntu/lecttue-diagonosis/YangDongJae/ai/data/Validation/')
        self.data_loader = torch.utils.data.DataLoader(self.dataset, batch_size = 10, collate_fn = self.collate_fn)
        self.val_data_loader = torch.utils.data.DataLoader(self.val_dataset, batch_size = 10,collate_fn = self.collate_fn)
        self.num_classes = 8
        self.epochs = epochs
        self.momentum = momentum
        self.lr = 0.005
        self.weight_decay = weight_decay
EN

回答 1

Stack Overflow用户

发布于 2022-05-10 09:05:33

之所以发生这种情况,是因为在创建elif对象期间,True条件不是True。请注意,self.path有一个Train子字符串,它与大写T盯着,而elif则将其与小写train进行比较,后者的计算结果为False。可以通过将elif更改为:

代码语言:javascript
复制
elif 'train'.lower() in self.path.lower():
    self.img_path = "/home/ubuntu/lecttue-diagonosis/YangDongJae/ai/data/Training/images/"
    self.lab_path = "/home/ubuntu/lecttue-diagonosis/YangDongJae/ai/data/Training/annotations/"
    self.label = list(sorted(os.listdir(self.lab_path)))
    self.imgs = list(sorted(os.listdir(self.img_path)

您还可以类似地更改验证用例的if语句。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72181975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档