steady-rans-surrogates / code /ezflow_v3 /baselines /Transolver-main /PDE-Solving-StandardBenchmark /utils /testloss.py
| import torch | |
| class TestLoss(object): | |
| def __init__(self, d=2, p=2, size_average=True, reduction=True): | |
| super(TestLoss, self).__init__() | |
| assert d > 0 and p > 0 | |
| self.d = d | |
| self.p = p | |
| self.reduction = reduction | |
| self.size_average = size_average | |
| def abs(self, x, y): | |
| num_examples = x.size()[0] | |
| h = 1.0 / (x.size()[1] - 1.0) | |
| all_norms = (h ** (self.d / self.p)) * torch.norm(x.view(num_examples, -1) - y.view(num_examples, -1), self.p, | |
| 1) | |
| if self.reduction: | |
| if self.size_average: | |
| return torch.mean(all_norms) | |
| else: | |
| return torch.sum(all_norms) | |
| return all_norms | |
| def rel(self, x, y): | |
| num_examples = x.size()[0] | |
| diff_norms = torch.norm(x.reshape(num_examples, -1) - y.reshape(num_examples, -1), self.p, 1) | |
| y_norms = torch.norm(y.reshape(num_examples, -1), self.p, 1) | |
| if self.reduction: | |
| if self.size_average: | |
| return torch.mean(diff_norms / y_norms) | |
| else: | |
| return torch.sum(diff_norms / y_norms) | |
| return diff_norms / y_norms | |
| def __call__(self, x, y): | |
| return self.rel(x, y) | |