Pytorch 以变换参数作为学习目标
比方说,我正在对torchvision图像应用随机模糊,并想训练网络猜测模糊能力。使用标准的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) 所以我看
转换
看起来很自然,但在数据集类实现中,数据和目标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