If I want to add some Gaussion noise in the CIFAR10 dataset which is loaded by torchvision, how should I do it? Or, if I have defined a dataset by torch.utils.data.TensorDataset, how can I add more data samples there? Is any function like append( )? Thanks.
There’s a few ways you can do this.
- If you don’t care about seeing all 50k cifar10 samples in one complete pass of the data loader you could pass in a transform that randomly returns noise instead of the image. i.e.
import random
class RandomNoise(object):
def __init__(self, probability):
self.probabilit = probability
def __call__(self, img):
if random.random() <= self.probability:
return img.clone().normal_(0,1)
return img
cifar10_dataset = torchvision.datasets.CIFAR10(root="...", download=True, transform=input_transform)
- You could sub class
CIFAR10
and override the__len__
function to return maybe100000
, then the__getitem__
function would look something like:
def __getitem__(self, index):
if index < 50000:
return super(MySubClass, self).__getitem__(index)
else:
return torch.Tensor(size).normal_(0,1), torch.Tensor(1).fill_(class_label)
Hi, I use torchvision.transform to do it, it has a lambda function which you can customized a funciton to add noise to the data. But the CIFAR10 image is small just 32 * 32 * 10, after add sp or gaussion noise on them, the final result seems like not well .