如何加载和拆分图像数据集进行训练?

时间:2021-03-04 12:30:58

标签: image split set load

我有一个简单的分类问题,葡萄柚图像有 2 个类别(“健康”和“生病”)。 我已将图像放在文件夹中:

root
    healthy
    sick

我现在正在尝试加载图像并将它们分成训练集和验证集。我以为我应该使用ImageFolder,例如

imgs = ImageFolder(path, transform=transform)

'path' 包含根文件夹的路径。之前定义了转换。 imgs 是一个张量。

from torchvision import transforms
transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.RandomHorizontalFlip(),
    transforms.RandomVerticalFlip(),
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
    # transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) --> which one should I choose ?
    ])

我的数据集非常小,所以如果可能的话,我需要通过随机翻转和其他变换来虚拟地增加它。

现在我想将集合分成 80% 的训练和 20% 的验证。 我应该做这样的事情吗?

split = int(0.8 * len(imgs))
index_list = list(range(len(imgs)))
train_idx, valid_idx = index_list[:split], index_list[split:]

下一步是什么?类似这样的事情?

## create training and validation sampler objects
tr_sampler = torch.utils.data.SubsetRandomSampler(train_idx)
val_sampler = torch.utils.data.SubsetRandomSampler(valid_idx)
## create iterator objects for train and valid datasets
trainloader = torch.utils.data.DataLoader(cifar, batch_size=256, sampler=tr_sampler)
validloader = torch.utils.data.DataLoader(cifar, batch_size=256, sampler=val_sampler)

任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试后,似乎加载阶段还可以。但是求解器如何知道哪些图像是“健康的”,哪些是“病态的”?

那么,我该如何编写训练循环呢? 我试过了,但失败了:

...
F = 0
for i in range(n):
    inner_sum = 0
    for j in range(i+1):
        inner_sum += H[j] * np.tan(alpha[j])
    F += 3 * gamma * H[i] * (R + inner_sum) ** 2

问题来自似乎不太好的“标签”。我希望它们是 0 或 1,但我得到的值从 0 到 9...有什么问题?