Search code examples
pythonpytorch

Get single random example from PyTorch DataLoader


How do I get a single random example from a PyTorch DataLoader?

If my DataLoader gives minbatches of multiple images and labels, how do I get a single random image and label?

Note that I don't want a single image and label per minibatch, I want a total of one example.


Solution

  • If you want to choose specific images from your Trainloader/Testloader, you should check out the Subset function from master:

    Here's an example how to use it:

    testset = ImageFolderWithPaths(root="path/to/your/Image_Data/Test/", transform=transform)
    subset_indices = [0] # select your indices here as a list
    subset = torch.utils.data.Subset(testset, subset_indices)
    testloader_subset = torch.utils.data.DataLoader(subset, batch_size=1, num_workers=0, shuffle=False)
    

    This way you can use exactly one image and label. However, you can of course use more than just one index in your subset_indices.

    If you want to use a specific image from your DataFolder, you can use dataset.sample and build a dictionary to get the index of the image you want to use.