我的代码找不到使用 PyTorch 初始化创建的实例



我实现了数据集类来使用模型,当我策略训练时我得到了错误

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'

和下面的代码出错。但我不知道为什么会有问题。我检查自己。Imgs '和'self '。使用print(self.imgs)和print(self.label)。这是完美的。

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

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)))
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
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

这是因为在self.dataset对象创建过程中elif条件不是True。注意,self.path有一个以大写T开头的Train子字符串,而elif将其与小写train进行比较,其计算结果为False。这可以通过将elif更改为:

来修复。
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语句以用于验证情况。

最新更新