I just some small changes and your transform works :).
- call super().init() to initialize the RandTransform correctly
- Changed the type of X to TensorImage
class AddNoise(RandTransform):
def __init__(self, mean=0., std=1., **kwargs):
self.std = std
self.mean = mean
super().__init__(**kwargs)
def encodes(self, x:TensorImage):
return x + torch.randn(x.size()) * self.std + self.mean
Test:
path = untar_data(URLs.MNIST)
class AddNoise(RandTransform):
def __init__(self, mean=0., std=1., **kwargs):
self.std = std
self.mean = mean
super().__init__(**kwargs)
def encodes(self, x:TensorImage):
return x + torch.randn(x.size()) * self.std + self.mean
db = DataBlock(blocks=(ImageBlock(cls=PILImage), CategoryBlock),
get_items=get_image_files,
batch_tfms=[AddNoise(mean=0., std=100.)],
get_y=parent_label)
dls = db.dataloaders(path)
dls.show_batch()
To apply the transform only with a 50 % chance do:
batch_tfms=[AddNoise(mean=0., std=100., p=0.5)],
Florian