我正在编写一个 pytorch 代码来根据目标变量进行分层拆分,方法是将图像数据加载到一个文件夹中,每个文件夹都包含类。
imageSize = 224
train_transforms = transforms.Compose([transforms.Resize((imageSize, imageSize)),
transforms.Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
),
transforms.ToTensor(),
# transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
])
train_set = datasets.ImageFolder(path, transform=train_transforms)
num_train = len(train_set) train_idx_, test_idx = train_test_split(np.arange(len(train_set.targets)),
test_size=0.2,
random_state=999,
shuffle=True,
stratify=train_set.targets) train_dataset_ = torch.utils.data.Subset(train_set, train_idx_) Test_dataset = torch.utils.data.Subset(train_set, test_idx)
train_idx, val_idx = train_test_split(np.arange(len(train_dataset_.dataset.targets)),
test_size=0.15,
random_state=999,
shuffle=True,
stratify=train_dataset_.dataset.targets) Train_dataset = torch.utils.data.Subset(train_dataset_, train_idx) Valid_dataset = torch.utils.data.Subset(train_dataset_, val_idx)
second_transform = transforms.Compose([transforms.PILToTensor()])
class MyDataset(Dataset):
def __init__(self, subset, transform=None):
self.subset = subset
self.transform = transform
def __getitem__(self, index):
x, y = self.subset[index]
if self.transform:
x = self.transform(x)
return x, y
def __len__(self):
return len(self.subset)
train_dataset = MyDataset(Train_dataset, transform= second_transform) valid_dataset = MyDataset(Valid_dataset, transform= second_transform) test_dataset = MyDataset(Test_dataset, transform= second_transform)
train_loader = DataLoader(train_dataset, batch_size=20)
valid_loader = DataLoader(valid_dataset, batch_size=20)
test_loader = DataLoader(test_dataset, batch_size=20)
images, labels = next(iter(train_loader))
我添加了
second_transform = transforms.Compose([transforms.PILToTensor()])
在类似错误“expects Tensor Image but PIL Image was found”之后。 请帮助。