Пример #1
0
    def normalize(self, gradients: ep.Tensor, *, x: ep.Tensor,
                  bounds: Bounds) -> ep.Tensor:
        bad_pos = ep.logical_or(
            ep.logical_and(x == bounds.lower, gradients < 0),
            ep.logical_and(x == bounds.upper, gradients > 0),
        )
        gradients = ep.where(bad_pos, ep.zeros_like(gradients), gradients)

        abs_gradients = gradients.abs()
        quantiles = np.quantile(flatten(abs_gradients).numpy(),
                                q=self.quantile,
                                axis=-1)
        keep = abs_gradients >= atleast_kd(ep.from_numpy(gradients, quantiles),
                                           gradients.ndim)
        e = ep.where(keep, gradients.sign(), ep.zeros_like(gradients))
        return normalize_lp_norms(e, p=1)
Пример #2
0
 def get_perturbations(self, distances: ep.Tensor, grads: ep.Tensor) -> ep.Tensor:
     return atleast_kd(distances, grads.ndim) * grads.sign()
Пример #3
0
 def normalize(self, gradients: ep.Tensor, *, x: ep.Tensor,
               bounds: Bounds) -> ep.Tensor:
     return gradients.sign()
Пример #4
0
 def normalize(self, gradients: ep.Tensor) -> ep.Tensor:
     return gradients.sign()