Pytorch 以变换参数作为学习目标

Pytorch 以变换参数作为学习目标,pytorch,dataset,torchvision,Pytorch,Dataset,Torchvision,比方说,我正在对torchvision图像应用随机模糊,并想训练网络猜测模糊能力。使用标准的转换看起来很自然,但在数据集类实现中,数据和目标applyes的转换是独立的: if self.transform is not None: img = self.transform(img) if self.target_transform is not None: target = self.target_transform(target) 所以我看

比方说,我正在对torchvision图像应用随机模糊,并想训练网络猜测模糊能力。使用标准的
转换
看起来很自然,但在数据集类实现中,数据和目标applyes的转换是独立的:

    if self.transform is not None:
        img = self.transform(img)

    if self.target_transform is not None:
        target = self.target_transform(target)
所以我看不到传递模糊值以插入目标的方法


嗯,我可以重写dataset类,但可能有更自然的方法将参数从data
transform
传递到
target\u transform

以下是我自己的方法,尽管我希望更优雅:

def myBlur( t):
    sigm = ( random.uniform(0.1,12.0) )
    t = torchvision.transforms.functional.gaussian_blur( t, 15, sigm )
    return ( t, sigm )

class MyMNIST( torchvision.datasets.MNIST ):
                                   
    @property
    def processed_folder(self) -> str:
        # we want files from 'MNIST' folder, not from __classname__ == 'MyMNIST'
        return os.path.join(self.root, 'MNIST', 'processed')

    def __getitem__(self, index: int) -> Tuple[Any, Any]:
        img, target = self.data[index], int(self.targets[index])
        img = Image.fromarray(img.numpy(), mode='L')

        # call all transformations here explicitly
        img = torchvision.transforms.ToTensor()(img)
        img = torchvision.transforms.Resize( (96,96) )(img)
        img, dd = myBlur( img )
        img = torchvision.transforms.Normalize((0.1307,), (0.3081,))(img)

        return img, dd