In the absence of any responses to my question I developed a custom transform (based on this example) and pass two instances of it (one as input transform
, one as output_transform
) to the custom dataset at intialisation (option 1). Then I will use the output_transform.inverse_transform()
method to “decode” the predictions later when using the estimator.
Here is the code if anyone is interested:
class StandardScaler():
"""Standardize data by removing the mean and scaling to
unit variance. This object can be used as a transform
in PyTorch data loaders.
Args:
mean (FloatTensor): The mean value for each feature in the data.
scale (FloatTensor): Per-feature relative scaling.
"""
def __init__(self, mean=None, scale=None):
if mean is not None:
mean = torch.FloatTensor(mean)
if scale is not None:
scale = torch.FloatTensor(scale)
self.mean_ = mean
self.scale_ = scale
def fit(self, sample):
"""Set the mean and scale values based on the sample data.
"""
self.mean_ = sample.mean(0, keepdim=True)
self.scale_ = sample.std(0, unbiased=False, keepdim=True)
return self
def __call__(self, sample):
return (sample - self.mean_)/self.scale_
def inverse_transform(self, sample):
"""Scale the data back to the original representation
"""
return sample * self.scale_ + self.mean_