Yeah I see, but so where would the plotting go in here? do you recommend doing em._predictions and em._targets?
Also, I’m concerned about the warning on EpochMetrics: “Current implementation does not work with distributed computations. Results are not gather across all devices and computed results are valid for a single device only.”

Does device here mean machine or gpu? Can I stay on one machine and use multiple gpus?

-Does this warning apply if I create my own custom metric like such?
class Mape(Metric):
    def __init__(self, output_transform=lambda x: x):

        self._num_examples = None
        self._sum_percentages = None
        super(Mape, self).__init__(output_transform=output_transform)

    @reinit__is_reduced
    def reset(self):
        self._num_examples = 0
        self._sum_percentages = 0
        super(Mape, self).reset()

    @reinit__is_reduced
    def update(self, output):
        y_pred, y = output

        errors = torch.abs(y_pred - y.view_as(y_pred))
        errors_divided = errors / y.view_as(y_pred) * 100

        # pdb.set_trace()

        self._num_examples += y.shape[0] * y.shape[1]
        self._sum_percentages += torch.sum(errors_divided).item()

    @sync_all_reduce("_num_examples", "_sum_percentages")
    def compute(self):
        if self._num_examples == 0:
            raise NotComputableError(
                "CustomAccuracy must have at least one example before it can be computed."
            )
        return self._sum_percentages / self._num_examples