我做了一個關于我的資料集的試驗,這是我完整的代碼:
data_root='D:/AuxiliaryDocuments/NYU/'
raw_data_transforms=transforms.Compose([#transforms.ToPILImage(),
transforms.CenterCrop((224,101))。
transforms.ToTensor()])
depth_data_transforms=transforms.Compose([transforms.CenterCrop((74,55)),
transforms.ToTensor()])
filename_txt={'image_train':'image_train.txt', 'image_test':'image_test.txt' 。
'depth_train':'depth_train.txt', 'depth_test':'depth_test.txt' }
class Mydataset(Dataset):
def __init__(self,data_root,transformation,data_type):
self.transform=transformation
self.image_path_txt=filename_txt[data_type]。
self.sample_list=list()
f=open(data_root '/' data_type '/' self.image_path_txt)
lines=f.readlines()
for line in lines:
line=line.strip()
line=line.replace(';','')
self.sample_list.append(line)
f.關閉()
def __getitem__(self, index):
item=self.sample_list[index] 。
img=Image.open(item)
如果self.transform不是無。
img=self.transform(img)
idx=index
print(type(img))
回傳 idx,img
def __len__(self):
return len(self.sample_list)
我列印的img型別是<類'torch.Tensor'>,然后我使用了下面的編碼:
列印資訊: 但是資料的型別是'<class 'list' >',我需要的是張量。 uj5u.com熱心網友回復: 這就是預期的輸出。在你的例子中,DataLoader 應該回傳一個串列。DataLoader的輸出是 例如, 在這里,64個標簽對應于批次中的64個影像。 為了把它傳遞給模型,你可以這樣做
標籤:test=Mydataset.com/share.html
test=Mydataset(data_root,raw_data_transforms, 'image_train')
test_1=Mydataset(data_root,depth_data_transforms,'depth_train')
test2=DataLoader(test,batch_size=4,num_workers=0,shuffle=False)
test_2=DataLoader(test_1,batch_size=4,num_workers=0,shuffle=False)
for idx,data in enumerate(test_2):
print(idx,data)
print(type(data))
(inputs batch, labels batch)。for idx, data in enumerate(test_dataloader):
如果idx == 0:
print(type(data))
print(len(data), data[0].shape, data[1].shape)
<類'串列'>
2 torch.Size([64, 1, 28, 28]) torch.Size([64])
#如果你在你的資料集中首先回傳img
return img, idx
# 要么
for idx, data in enumerate(test_dataloader):
# 將輸入傳遞給模型
out = model(data[0])
# 你的標簽是data[1]。
# 或者
for idx, (inputs, labels) in enumerate(test_dataloader):
# 把輸入傳給模型
out = model(inputs)
# 你的標簽在 "標簽 "變數中
